【发布时间】:2018-02-21 11:13:20
【问题描述】:
我正在尝试在 OS X 10.8.5 上编译使用外部库 (cairo) 的 C++ 程序。以前,同样的程序在 Linux 上编译成功。不幸的是,我似乎无法编译程序,并出现以下错误。虽然我尝试了几件事,但我现在没有解决方案。我正在使用 llvm-g++-4.2。非常感谢任何有助于解释正在发生的事情和解决此问题的帮助。谢谢!
g++ -O3 -Wall moment_tensor.cpp -o focimt getopts.o faultsolution.o
focimtaux.o inputdata.o timedist.o traveltime.o usmtcore.o
trinity_library.o -L/opt/local/lib/ -lcairo
Undefined symbols for architecture x86_64:
"std::ctype<char>::_M_widen_init() const", referenced from:
Options::showHelp(char*) in getopts.o
"std::__detail::_List_node_base::_M_hook(std::__detail::_List_node_base*)",
referenced from:
TransferSolution(Taquart::SolutionType,std::list<Taquart::FaultSolution,
std::allocator<Taquart::FaultSolution> >&)in usmtcore.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
make: *** [focimt] Error 1}
【问题讨论】:
-
也许 usmtcore.o 和 getopts.o 库没有为 x86_64 正确编译?不完全是您的应用程序,但请查看 stackoverflow.com/questions/29607258/…
-
谢谢!但这些是子程序,我怀疑它们是个问题。
-
ld: symbol(s) not found for architecture x86_64看起来他们是个问题 -
到目前为止,我的猜测是这些子例程中使用的 showHelp 和 TransferSolution 不在我的 g++(4.2 版)标准库中。不幸的是,我认为我拥有的 OS X 10.8.5 不允许我进一步升级 g++。
-
事实证明,我犯了一个错误,没有从 Linux 机器上的先前编译中删除 *.o 文件。一旦这些被删除,我就可以编译程序并发出一个小警告。感谢您的宝贵时间!
标签: c++