我需要交叉編譯一些C/C++庫。該庫依賴於幾個C/C++庫。其中一些圖書館依次依賴於其他圖書館。所有庫都帶有配置腳本。我知道如何在主機系統上編譯和安裝庫 - 在需要的庫之前安裝依賴關係。顯然這在交叉編譯時不起作用。任何提示都表示讚賞。謝謝。如何交叉編譯具有依賴關係的C++庫?
回答
通常,要交叉編譯自動處理的程序包,您需要向./configure
傳遞幾個額外的參數:--host
和--build
。 --host
是構建程序將運行的系統的名稱,--build
是執行編譯的系統的名稱。
當我說「系統的名稱」時,我的意思是一個形式爲ARCH-VENDOR-OS-LIBC
的元組。 (例如,i686-pc-linux-gnu
是描述我目前使用的系統的元組。)有時,部分元組被省略,例如mingw32工具鏈(在我的系統中,mingw32十字工具與元組i586-mingw32msvc
和/或amd64-mingw32msvc
)。
(有另一個參數來配置,--target
,這對交叉編譯的編譯器,並指定編譯器正在構建生成代碼時將針對該系統。)
每個工具鏈具有下作爲這樣/usr
自己的子目錄/usr/i586-mingw32msvc
。你將要在這裏安裝新的軟件包,以便找到它們。使用--prefix
參數到configure
。
從我的GNU/Linux系統的MINGW32體系,使交叉編譯,我會跑configure
這樣的:
./configure --host=i586-mingw32msvc --build=i686-pc-linux-gnu --prefix=/usr/i586-mingw32msvc
因此,開始你的依賴關係圖的葉子和您的方式工作。您可能還想通過--enable-static --disable-shared
至configure
:這將停止爲librapled軟件包創建動態庫。如果程序包需要運行程序作爲構建的一部分,則可能必須原生安裝一些程序包並交叉編譯它們。
有時configure
的測試將失敗:例如,它試圖編譯和運行一個程序。通常這些測試會設置一個緩存變量,您也可以通過命令行將其傳遞到configure
。同樣,您可以覆蓋程序路徑和庫編譯/鏈接標誌等內容。檢查你的包裹的./configure --help
。
您需要做的是爲所有依賴項創建靜態庫並將它們靜態鏈接到您的可執行文件。您需要使用交叉編譯器來生成這些庫。通過查找「mingw靜態鏈接交叉編譯」可以找到一些很好的示例
只要確保針對目標系統的頭文件和庫構建交叉編譯共享庫,完全沒有問題而不是開發主機。
即使您將所有顯而易見的依賴項都構建爲靜態庫,您仍可能會發現自己正在鏈接到共享的C和C++語言運行時庫。您還需要確保用於交叉編譯的頭文件是來自目標系統而非開發主機的頭文件。
不這樣做可能會在大多數時間工作。剩下的時間你會得到微妙的難以調試的崩潰。
您如何實現這一點取決於您的交叉工具鏈和目標環境。正如你所提到的,我會猜測它是GCC和一些Linux的開發主機和目標 - 雖然這些原則同樣適用於使用其他開發主機。
交叉編譯通常會構建GCC和bin-utils分發,以便默認的庫和頭搜索路徑指向目標系統的根文件系統的副本。這是鏈接器將查找共享庫進行鏈接的位置,並且在這裏您可以在構建它們時安裝依賴共享庫。
您可以通過在命令行上將--sysroot <mySysRoot>
選項傳遞給GCC來覆蓋GCC的默認系統根目錄。
- 1. 如何編譯具有依賴關係的包?
- 2. C - 編譯包含的依賴關係
- 3. C++庫交叉依賴關係 - 從llvm移植到gcc
- 4. 如何在用sbt在Scala中交叉編譯時解決依賴關係?
- 5. C++庫交叉編譯
- 6. C++ makefile編譯依賴庫
- 7. 在具有依賴關係的Code :: Blocks中編譯
- 8. 使用javac和jars編譯具有依賴關係的Java類
- 9. 無法編譯具有依賴關係的Python腳本
- 10. Android NDK中的靜態庫交叉依賴關係
- 11. 結構圖 - 具有依賴關係的安裝依賴關係
- 12. mvn依賴關係:具有傳遞性依賴關係的樹
- 13. 未編譯的Maven依賴關係
- 14. 如何在pip安裝期間編譯C++依賴關係?
- 15. 如何在gnu中設置交叉目錄依賴關係make
- 16. C編譯器對體系結構的依賴關係
- 17. 是否有可能跟蹤Xcode C++編譯依賴關係?
- 18. Scala/Clojure編譯依賴關係
- 19. 指定編譯順序依賴關係
- 20. 重新編譯Jar依賴關係
- 21. Maven不會編譯Selenium依賴關係
- 22. 編譯與依賴關係的PIN工具
- 23. 如何在類庫具有文件依賴關係
- 24. .NET編譯具有所有依賴性
- 25. 編譯C文件與彙編程序文件依賴關係
- 26. 爲什麼我的庫的編譯依賴關係泄漏?
- 27. 如何編譯所有依賴關係和共享庫到一個二進制
- 28. 如何使用NUnit編寫測試用例,它具有對依賴關係的依賴關係?
- 29. c#庫的鏈接依賴關係
- 30. 具有依賴關係的Arduino-like Makefile ...?