【问题标题】:How do I make the MinGW cross compiler use the same libraries as gcc?如何让 MinGW 交叉编译器使用与 gcc 相同的库?
【发布时间】:2015-04-12 23:16:27
【问题描述】:

我的程序使用 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

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

【问题讨论】:

  • 你也需要交叉编译库!
  • 你没有。它不会起作用。

标签: c linux gcc mingw


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多