![](/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.