MacBook Maverick编译SimpleParser.cc遇x86_64架构符号未找到错误
解决MacBook Mavericks下编译SimpleParser.cc的GMP链接错误
我来帮你搞定这个编译报错的问题——你遇到的Undefined symbols for architecture x86_64错误,大概率是GMP库的安装不完整、链接顺序不对,或者系统和库的架构不匹配导致的。试试下面的步骤:
1. 先确认GMP库(含C++绑定)是否正确安装
Mac系统默认不带GMP,你得先装完整的库,包括支持C++的gmpxx组件:
- 如果你用Homebrew(如果你的Mavericks还能跑Homebrew的话),执行:
brew install gmp - 要是Homebrew装不了(毕竟Mavericks是老系统了),就手动编译源码:
- 下载GMP的源码包
- 解压后进入源码目录,执行:
这里./configure --prefix=/usr/local --enable-cxx make sudo make install--enable-cxx是关键,它会编译出C++需要的gmpxx库。
安装完后,确认库文件路径:/usr/local/lib下应该有libgmp.dylib和libgmpxx.dylib,头文件在/usr/local/include下。
2. 调整编译命令的链接顺序
你现在用的命令里,链接库的顺序反了——GCC的链接规则是依赖库要放在被依赖的库后面,gmpxx依赖gmp,所以得把-lgmp放在-lgmpxx前面。修改后的命令:
g++ -g -DuseGMP -o testCC SimpleParser.cc -lgmp -lgmpxx
如果编译器找不到库,就手动指定头文件和库的路径:
g++ -g -DuseGMP -I/usr/local/include -L/usr/local/lib -o testCC SimpleParser.cc -lgmp -lgmpxx
-I用来指定头文件目录,-L指定库文件目录,确保编译器能找到GMP的文件。
3. 检查C++标准兼容性
Mavericks自带的g版本比较老,试试指定C98标准(旧版GMP对这个标准兼容性更好):
g++ -g -DuseGMP -std=c++98 -I/usr/local/include -L/usr/local/lib -o testCC SimpleParser.cc -lgmp -lgmpxx
4. 验证GMP库的架构匹配
报错里提到了x86_64,要确保你装的GMP是这个架构的。执行下面的命令检查:
file /usr/local/lib/libgmp.dylib
输出里必须包含x86_64,如果是其他架构(比如arm64),那和你的Mavericks系统不兼容,得重新编译对应架构的GMP。
最后,再检查下SimpleParser.cc里有没有正确包含GMP的C++头文件:#include <gmpxx.h>,如果漏了也会导致符号找不到。
内容的提问来源于stack exchange,提问作者Ka Wa Yip
相关产品推荐
相关产品推荐

