我的程序使用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
所以,老实说,我不知道该怎么做,我非常感谢你的帮助。
答案 0 :(得分:3)
首先,免责声明:您使用的交叉编译器既不由我代表的MinGW.org分发,也不支持;如果您正在寻找预编译的解决方案,您应该从特定交叉编译器本身的分销商那里寻找它。
也就是说,我可以提供以下见解(通常适用于任何交叉编译器):您在/usr/include
或/usr/local/include
中找到的标头,以及{您在libgmp.so
或/usr/lib
中找到的{1}}旨在与您的本机平台编译器一起使用。它们不适合,并且不能与MinGW交叉编译器一起使用;试图这样做肯定是行不通的。因此,您有两种选择:
请求您的跨编译器经销商提供gmp.dll的预编译副本(或者至少是兼容的导入库,尽管您可能需要使用您自己的应用程序分发gmp.dll (无论如何),以及任何相关的头文件和/或等效的静态可链接库,用于交叉编译器。
使用交叉编译器自己构建gmp.dll,然后将其安装,关联的头文件,也可能将其关联的导入库和/或等效的静态链接库安装到与十字架相同的前缀路径中 - 编译器本身。