我已经安装了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++
相反,则一切正常。好 -
链接错误(__gmpz_init,__ gmpz_clear等)是GMP“内部”。它们应该来自C语言基础库libgmp。
引用它们的代码(.text $ ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_S3 [ ZN23__gmp_binary_multiplies4evalEP12__mpz_structPKS0_S3等)C ++。
我怀疑问题在于您的“ 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源文件。
反过来,这意味着:
...和...
建议:
尝试再次从源代码构建libGMP。删除所有内容,从libGMP tarball中重新提取,并仔细按照INSTALL指示进行:
./configure
make
make check <= VERY IMPORTANT!!
make install
我很好奇您的构建环境(Windows?Linux?),编译器(精确的MinGW版本)和目标(如果您是在Windows工作站上构建,是否要以Windows .exe的形式运行GMP应用程序)?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句