$ 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)
。是什么给了什么?
答案 0 :(得分:9)
您需要链接C ++库以及C库:
g++ -c test.cpp -o test.o -lgmpxx -lgmp
# ^^^^^^^
答案 1 :(得分:1)
除了Kerrek SB的答案之外,我可以通过我的实验确认两件事:
-lgmp
和-lgmpxx
的包含内容相同,因为g++ -M main.cpp -lgmp
的输出与g++ -M main.cpp -lgmpxx
相同g++ main.cpp -Wl,-t -lgmp
与g++ main.cpp -Wl,-t -lgmpxx
不同,只有最后一个有效我没有使用GMP的经验,但由于这个目录在gcc配置中是硬编码的,至少在这个Ubuntu版本中,你需要让gcc输出更加冗长,并且需要很多耐心来解析所有输出和也许你会找到真正的原因。