使用mingw进行交叉编译时遇到缺失的库文件问题

4

我有时会遇到这个问题:

1 - 我在Ubuntu Linux上为Ubuntu开发了一个可运行的C++/C程序,使用一些库(这些库是跨平台的,如OpenSSL、Boost、GNU Scientific Library、DCMTK等,通常可以从apt-get获取,并且已经正确安装)。

2 - 我还想使用mingw(x86_64-w64-mingw32-g++)将程序交叉编译到Windows上运行。

3 - 这些库在mingw中缺失。

是否有一种通用的方式可以轻松地将任何Linux版本(或源代码)的库“转换”为mingw安装,以便可以用于构建Windows程序?每个库似乎都有自己单独而复杂的mingw安装说明。

3个回答

1
您肯定不能直接将Linux库转换为Windows,因为它们几乎肯定使用了Linux系统调用和调用特定于Linux的库(例如C运行时库),即使代码没有直接调用其他任何内容,编译器也可能隐式添加函数调用,例如从模板函数进行内存分配调用等。
您可能可以找到“替代”的Windows库,但是许多库可能随附有Windows安装程序,这使得在不使用Wine或具有“真正” Windows的情况下安装变得困难(但是然后您需要它来测试应用程序,所以我不确定它实际上有多大阻碍)。
对于一些以便携方式编写的库,可能可以在Linux下作为交叉编译器使用mingw编译器构建,这可能比安装现成的Windows库更容易。 但这假设您可以找到源代码...

1

我现在正在研究类似的问题,遇到了像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的容器,它们可以彼此通信。

我在WSL2中运行需要的基本代码,并且当我需要从Windows访问它时,我使用Docker。

这不是完美的解决方案,但我希望它能有所帮助。


-2

这个问题是关于设置交叉编译环境的。这个答案并没有帮助到这一点,它只是说可以进行本地编译。 - Ludwig Schulze
@LudwigSchulze - 这个链接描述了如何设置编译环境。它展示了编辑 fstab 将会修复编译问题。 - Gabriel
1
你的链接描述了如何对本机MinGW安装进行某些操作,即在运行Windows操作系统的PC上。然而,问题是要求在运行Linux计算机上进行交叉编译的帮助。发帖人面临的具体问题是如何将库依赖的windows版本安装到他的Linux计算机上,并不能通过链接建议编辑文件C:\MinGW\msys\something来解决,因为 (1) 在Linux计算机上该文件不存在,(2) 解决方案比修复路径或复制一些已包含在MinGW中的DLL更为复杂。 - Ludwig Schulze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接