无法在Linux上使用Mingw链接到静态库

扎基

我已经安装了GMP库,并尝试与mingw-w64-posix交叉编译。

我的库位于/ usr / local / lib中。

我的编译命令如下所示:

x86_64-w64-mingw32-g++-posix src/factorial.cpp -o bin/factorial.win.o -I/usr/local/include -L/usr/local/lib -lgmp -lgmpxx

它引发了未定义的参考错误:(我可以从删除-L....相同的错误的整个块。似乎是由于某种原因该库未链接)

/usr/bin/x86_64-w64-mingw32-ld: /tmp/ccxY03WS.o:factorial.cpp:(.text$_ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_S3_[_ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_S3_]+0x27): undefined reference to `__gmpz_mul'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/ccxY03WS.o:factorial.cpp:(.text$_ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_l[_ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_l]+0x26): undefined reference to `__gmpz_mul_si'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/ccxY03WS.o:factorial.cpp:(.text$_ZN10__gmp_exprIA1_12__mpz_structS1_E7init_siEl[_ZN10__gmp_exprIA1_12__mpz_structS1_E7init_siEl]+0x1a): undefined reference to `__gmpz_init_set_si'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/ccxY03WS.o:factorial.cpp:(.text$_ZN10__gmp_exprIA1_12__mpz_structS1_EC1EOS2_[_ZN10__gmp_exprIA1_12__mpz_structS1_EC1EOS2_]+0x2e): undefined reference to `__gmpz_init'
/usr/bin/x86_64-w64-mingw32-ld: /tmp/ccxY03WS.o:factorial.cpp:(.text$_ZN10__gmp_exprIA1_12__mpz_structS1_ED1Ev[_ZN10__gmp_exprIA1_12__mpz_structS1_ED1Ev]+0x14): undefined reference to `__gmpz_clear'
collect2: error: ld returned 1 exit status

但是,如果我将编译器更改为g++相反,则一切正常。

保罗4

好 -

  1. 链接错误(__gmpz_init,__ gmpz_clear等)是GMP“内部”。它们应该来自C语言基础库libgmp。

  2. 引用它们的代码(.text $ ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_S3 [ ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_S3等)C ++。

  3. 我怀疑问题在于您的“ gmpxx”库是使用不同的C ++编译器构建的,该C ++编译器与MinGW具有不同的“名称处理”约定。

解:

下载完整的libGMP源代码(例如,从https://gmplib.org/下载),并使用libmingw-w64-posix ++ C ++交叉编译器重建所有内容(包括libgmpxx)。


附录:

我下载了gmp-6.2.1源码,并在这里找到__gmpz_clear:

gmp-6.2.1 \ gmp-h.in

#define mpz_clear __gmpz_clear
__GMP_DECLSPEC void mpz_clear (mpz_ptr);

“ gmp-h.in”是项目的“ autoconf”使用的模板,用于为指定的目标环境生成libGMP源文件。

反过来,这意味着:

  1. 您最初使用的项目(在您的原始问题中)未配置为MinGW

...和...

  1. 尝试从源代码构建时,您没有正确运行“配置”。

建议:

  1. 尝试再次从源代码构建libGMP。删除所有内容,从libGMP tarball中重新提取,并仔细按照INSTALL指示进行:

    ./configure
    make
    make check       <= VERY IMPORTANT!!
    make install
    
  2. 我很好奇您的构建环境(Windows?Linux?),编译器(精确的MinGW版本)和目标(如果您是在Windows工作站上构建,是否要以Windows .exe的形式运行GMP应用程序)?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在Linux上使用Mingw链接到静态库

来自分类Dev

使用CMake链接到Windows上的静态库的问题

来自分类Dev

动态链接可以正常工作时,无法使用VS2012链接到静态Boost库

来自分类Dev

无法使用VS2012链接到静态Boost库,而动态链接可以正常工作

来自分类Dev

在 LINUX 上链接静态和动态库

来自分类Dev

使用名称空间链接到静态库时,无法解析的外部符号

来自分类Dev

使用automake将共享库链接到静态libtool库

来自分类Dev

QtCreator-无法链接到静态库(ld错误)

来自分类Dev

无法链接到Windows MinGW的libnanomsg,使用MXE交叉编译

来自分类Dev

在Linux上使用Mingw编译GMP库

来自分类Dev

在Linux上使用Mingw编译GMP库

来自分类Dev

DLL链接到静态库

来自分类Dev

Linux上的C ++,确认库中的代码未静态链接到生成的可执行文件中

来自分类Dev

如何使用Visual D链接到静态库中的包

来自分类Dev

使用GCC链接到静态库时遇到问题

来自分类Dev

MingW静态库链接-SFML 2.1

来自分类Dev

ld MinGW链接到标准C库

来自分类Dev

将静态库链接到共享库

来自分类Dev

无法在 Mac OS X 上链接静态库

来自分类Dev

无法链接到 macOS 上的 C 标准库

来自分类Dev

无法从Makefile链接静态库

来自分类Dev

链接到Xcode中的库-静态或动态

来自分类Dev

将静态库链接到dll

来自分类Dev

将SFML静态库链接到项目

来自分类Dev

无法链接到pcl库。

来自分类Dev

无法链接到pcl库。

来自分类Dev

无法链接到标准库

来自分类Dev

无法将外部git CMake项目的输出(静态库)链接到CMake项目

来自分类Dev

如何使用链接到该静态库的项目来计算XCode 5中的静态库的代码覆盖率?

Related 相关文章

热门标签

归档