如何使MinGW交叉编译器使用与gcc相同的库?

时间:2015-04-12 23:16:27

标签: c linux gcc mingw

我的程序使用GNU多精度算术库来处理任意大小的数字。我使用GCC成功编译它:

gcc main.c -o diff -g -lgmp

但是,当我尝试使用MinGW交叉编译器编译器时,出现以下错误:

i686-w64-mingw32-gcc main.c -o diff.exe -g -lgmp
main.c:3:46: fatal error: gmp.h: No such file or directory
 #include <gmp.h>//For files of arbitrary size
然后我尝试告诉它头文件的确切位置:

 i686-w64-mingw32-gcc main.c -o diff.exe -I/usr/include -g -lgmp
/usr/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status

好的,我现在认为它已成功找到标题,但无法找到该库。所以我再试一次:

i686-w64-mingw32-gcc main.c -o diff.exe -I/usr/include -g -L/usr/lib -lgmp
/usr/lib/gcc/i686-w64-mingw32/4.9.2/../../../../i686-w64-mingw32/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status

我想我需要指定要使用的确切文件,所以我尝试了这个:

i686-w64-mingw32-gcc main.c -o diff.exe -I/usr/include -g /usr/lib/libgmp.so
/usr/lib/libgmp.so: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status

所以,老实说,我不知道该怎么做,我非常感谢你的帮助。

1 个答案:

答案 0 :(得分:3)

首先,免责声明:您使用的交叉编译器既不由我代表的MinGW.org分发,也不支持;如果您正在寻找预编译的解决方案,您应该从特定交叉编译器本身的分销商那里寻找它。

也就是说,我可以提供以下见解(通常适用于任何交叉编译器):您在/usr/include/usr/local/include中找到的标头,以及{您在libgmp.so/usr/lib中找到的{1}}旨在与您的本机平台编译器一起使用。它们不适合,并且不能与MinGW交叉编译器一起使用;试图这样做肯定是行不通的。因此,您有两种选择:

  1. 请求您的跨编译器经销商提供gmp.dll的预编译副本(或者至少是兼容的导入库,尽管您可能需要使用您自己的应用程序分发gmp.dll (无论如何),以及任何相关的头文件和/或等效的静态可链接库,用于交叉编译器。

  2. 使用交叉编译器自己构建gmp.dll,然后将其安装,关联的头文件,也可能将其关联的导入库和/或等效的静态链接库安装到与十字架相同的前缀路径中 - 编译器本身。