【发布时间】:2021-04-04 17:13:04
【问题描述】:
我已经安装了GMP library 并尝试与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++,则一切正常。
【问题讨论】:
-
老兄...... 什么是未定义的参考???请“编辑”您的帖子,然后复制/粘贴错误消息!
-
对不起,我想念点击那个
-
看起来您将标头包含为 C++ 代码,将库包含为 C 代码,并且损坏的 C++ 名称与基本 C 名称不匹配。
-
你到底是什么意思?我包括 gmpxx.h 头文件(这是基本的 gmp c++ 头文件),并且我链接到 c++ 以及 gmp 的 c 静态库
-
我认为 C++ 函数名称修饰没有标准,因此不同的编译器可能不兼容。
标签: c++ linux g++ mingw-w64 gmp