cross-compiling - Clang++ 无法找到任何 stdlib header

在 mac os x 系统中,我试图交叉编译一个简单的 C++11 程序,但 clang++ 甚至找不到简单的 header :

test.cc

#include <string>

int main(int argc, char *argv[])
{
    return 0;
}

这里是错误

$ clang++ --std=c++11 --stdlib=libc++ test.cc -target i386-win32 -o test
clang: warning: argument unused during compilation: '--stdlib=libc++'
test.cc:1:10: fatal error: 'string' file not found
#include <string>
         ^
1 error generated.

它在没有 -target 参数的情况下编译得很好。

我也尝试过不使用 --stdlib=libc++ 参数,但没有帮助。

编辑 原来你不能真的仅仅通过添加一个标志就交叉编译到windows:

$ clang++ -std=c++11 -v test.cc -target i386-win32 -o test
Apple LLVM version 7.0.0 (clang-700.0.72)
Target: i386--windows-msvc
Thread model: posix
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang" -cc1 -triple i386--windows-msvc -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name test.cc -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -target-cpu pentium4 -target-linker-version 253.2 -v -dwarf-column-info -resource-dir /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0 -internal-isystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0/include -internal-isystem C:/Program Files/Microsoft Visual Studio 10.0/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include -internal-isystem C:/Program Files/Microsoft Visual Studio 8/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /Users/drninjabatman/Scratch -ferror-limit 19 -fmessage-length 181 -mstackrealign -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 -fdelayed-template-parsing -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -o /var/folders/j_/56ztdh452d95t2wtk6zx0j6w0000gn/T/test-42e69a.o -x c++ test.cc
clang -cc1 version 7.0.0 based upon LLVM 3.7.0svn default target x86_64-apple-darwin14.5.0
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 10.0/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include"
#include "..." search starts here:
#include <...> search starts here:
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/7.0.0/include
End of search list.
test.cc:1:10: fatal error: 'string' file not found
#include <string>
         ^
1 error generated.

最佳答案

clang 是一个出色的交叉编译器,但正如您正确指出的那样,除非您拥有所需的其余部分,否则交叉编译器几乎没有用处。至少你需要

  • 目标库的头文件
  • 已为目标编译的库
  • 能够将您的目标文件和库链接到可执行文件中的链接器

有几个地方可以找到所有这些东西。如果你想要一套预打包的工具,你可以看看 ELLCC . ELLCC是一个基于clang的交叉编译工具链。它包括

  • ecc - 用于 ARM、Mips、PowerPC 和 x86 的基于 clang 的编译器
  • Linux 和 Windows 的头文件和预编译的 C 和 C++ 标准库
  • 一组 binutils(汇编器、链接器等)配置为处理所有目标

这使您可以完全按照自己的意愿行事:

% ecc -target x86_64-w64-mingw32 test.cc -o test.exe
% file test.exe
test.exe: MS-DOS executable PE  for MS Windows (console), Mono/.Net assembly
% ecc -target aarch64-linux-eng test.cc -o test
% file test
test: ELF 64-bit LSB executable, version 1 (SYSV), statically linked, not stripped
%

关注download链接以获取在 Linux、Windows 或 Mac OS X 上运行的预编译工具。

关于cross-compiling - Clang++ 无法找到任何 stdlib header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056610/

相关文章:

elixir - 左外连接与 Elixir 的理解

session - 身份验证为匿名的用户已尝试访问拥有的 session

cmake - 如何编写功能测试脚本在cmake/ctest下运行

c++11 - 将 char16_t 转换为 long/integer,(相当于 atoi/atol

c# - 如何知道壁虎浏览器是否完成加载网页?

numpy - numpy 中有 elliptictheta 函数吗?

wpf - 更改 UIElement 的角度

time - NetLogo 时间扩展 : Plotting graphs does not wor

maven - 在 Nexus 中部署后,POM.xml 中的变量没有被解析?

codeigniter - 从数据库下载文件或在 codeigniter 中保存文件夹