$ apt-cache show libgmp10 Package: libgmp10 ... Version: 2:5.0.2+dfsg-2ubuntu2
test.cpp :
#include <gmpxx.h> #include <iostream> using namespace std; int main() { mpz_class x = 42; cout << x; }
编译:
$ g++ -c test.cpp -o test.o $
好
链接:
$ g++ test.o -lgmp test.o: In function `std::ostream& operator<< <__mpz_struct [1]>(std::ostream&, __gmp_expr<__mpz_struct [1], __mpz_struct [1]> const&)': test.cpp:(.text._ZlsIA1_12__mpz_structERSoS2_RK10__gmp_exprIT_S4_E[_ZlsIA1_12__mpz_structERSoS2_RK10__gmp_exprIT_S4_E]+0x2a): undefined reference to `operator<<(std::ostream&, __mpz_struct const*)' collect2: error: ld returned 1 exit status
在链接时找不到operator<<(ostream&, mpz_class)
。 是什么赋予了?
您需要链接C ++库以及C库:
g++ -c test.cpp -o test.o -lgmpxx -lgmp # ^^^^^^^
除了Kerrek SB的回答外,我还可以从我的实验中确认两件事:
g++ -M main.cpp -lgmp
的输出与g++ -M main.cpp -lgmp
的输出相同,所以-lgmp
和-lgmpxx
的内含物是相同的 g++ main.cpp -Wl,-t -lgmp
不同于g++ main.cpp -Wl,-t -lgmpxx
,只有最后一个 我没有使用GMP的经验,但是因为这个目录在gcc配置中是硬编码的,所以至少在这个Ubuntu版本中,你需要使gcc输出更加冗长,并且使用很多的耐心来分析所有的输出,也许你会找到真正的原因。