簡體   English   中英

使用 mingw 交叉編譯時缺少庫

[英]Missing libraries when cross-compiling using mingw

我有時會遇到這個問題:

1 - 我在 Ubuntu Linux 上為 Ubuntu 開發了一個可用的 C++/C 程序,它使用了一些庫(與平台無關,例如 OpenSSL、Boost、GNU 科學庫、DCMTK 等:這些通常可以從 apt-get 獲得,並正確安裝)。

2 - 我還想從 Ubuntu 交叉編譯程序以在 Windows 上運行,使用 mingw (x86_64-w64-mingw32-g++)。

3 - mingw 中缺少庫。

有沒有一種通用的方法可以輕松地將任何庫從 linux 版本(或源代碼)“轉換”為 mingw 安裝,以便它可以用於構建 windows 程序? 每個庫似乎都有自己單獨的 mingw 復雜安裝說明。

您當然不能將 Linux 庫直接轉換為 Windows,因為它們幾乎肯定會使用 Linux 系統調用和特定於 Linux 的調用庫(例如 C 運行時庫)(即使代碼不直接調用其他任何東西) ,編譯器可能會隱式添加函數調用,例如來自模板函數的內存分配調用等)

您也許可以找到可以安裝的“替代”Windows 庫,但是是的,許多庫可能帶有 Windows 安裝程序,這使得在不使用 Wine 或擁有“真實”Windows 的情況下很難安裝(但是您需要那個來測試您的應用程序,所以我不確定它到底有多大障礙)。

某些庫可能可以使用 mingw 編譯器構建為 Linux 下的交叉編譯器,如果它們以可移植的方式編寫,這可能比安裝現成的 Windows 庫更容易選擇。 但它假設你可以找到來源......

現在正在研究類似的東西,但遇到了諸如 openssl、boost、sqlite、libpcap 等庫的問題……

迄今為止發現的最佳解決方案是利用 WSL2 和 Docker。

https://code.visualstudio.com/blogs/2020/03/02/docker-in-wsl2

WSL2 是 Windows 的 Linux 環境(使用 Hyper-V)。

Docker 允許您為 Windows 和 Linux 創建可以相互通信的容器。

我有我需要在 Linux 中的 WSL2 下運行的基本代碼,當我需要從 Windows 訪問它時,我使用 docker。

這不是一個完美的解決方案,但我希望它有所幫助。

一些 Linux 程序可以通過 Mingw 在 Windows 上編譯。
下面是如何設置交叉編譯器環境: 如何用Mingw 編譯Linux 程序?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM