![](/img/trans.png)
[英]Cross-compiling C++ OpenCV from Visual Studio 2013 on Windows to Ubuntu
[英]Cross-compiling from OS X to Windows using clang and the Visual Studio 2013 runtime
我想在OS X上使用clang生成与Visual Studio 2013运行时链接的Windows二进制文件,但如果没有MSVC的link.exe
如何使clang生成正确的目标文件和链接并不是很明显。 我的Windows机器上的目标三重clang -v
报告是i686-pc-windows-msvc
但OS X上使用-target
选项的clang不接受这一点。
如何交叉编译这样一个简单的例子:
#include <iostream>
int main() {
std::cout << "Hello, world!\n";
}
这有点实验性。 这个例子可以成功编译和链接,但我现在不希望以这种方式构建一个大而复杂的项目(例如Chromium)。
C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\include
。 这也应包含在快递版中。 ( /path/to/vs2013_include
如下) C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\lib
。 这也应包含在快递版中。 ( /path/to/vs2013_lib
如下) C:\\Program Files (x86)\\Microsoft SDKs\\Windows
找到现有安装。 (下面是/path/to/windows/sdk/vX.X/Lib
) lld
的构建,llvm链接器。 它尚未完全完整,必须按照其网站上的说明进行构建。 将此文件另存为test.cpp
:
#include <iostream>
int main() {
std::cout << "Hello, world!\n";
}
首先,运行clang(使用路径指向VS2013标头替换的位置):
clang++ -target i386-pc-win32 -isystem /path/to/vs2013_include -std=c++11 -fms-extensions -fms-compatibility -fdelayed-template-parsing -fno-rtti -fno-exceptions -D_HAS_EXCEPTIONS=0 -D_ITERATOR_DEBUG_LEVEL=0 -fmsc-version=1800 -c test.cpp
这应该生成test.o
然后,运行链接器(使用相应的VS2013 lib和WinSDK目录):
lld -flavor link /libpath:/path/to/vs2013_lib /libpath:/path/to/windows/sdk/vX.X/Lib kernel32.lib user32.lib shell32.lib /subsystem:console libcmt.lib test.o
这应该生成可以在Windows上运行的test.exe
。
lld
功能的兼容性尚未完成。 lld
触发断言。 这只在OS X上测试过。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.