【发布时间】:2013-03-12 06:44:03
【问题描述】:
我在 Ubuntu 12.04 上使用 CERN 的 ROOT 时偶然发现了这个非常烦人的问题,但我认为这是一个更普遍的问题。
我有一些带有外部引用的 C++ 代码,我使用以下 makefile 编译和链接这些代码。在我的装有 OS X 10.8 的 Mac 和一台装有 SL5 的服务器上,这可以正常工作。
CXX=clang++
CXXFLAGS=-Wall -O2 -g $(shell root-config --cflags --libs)
testroot: testroot.cc
计算结果为
clang++ -Wall -O2 -g -pthread -m64 -I/opt/ROOT/5.34.05/include/root -L/opt/ROOT/5.34.05/lib/root -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic testroot.cc -o testroot
这给了我未定义的引用和 Ubuntu 服务器上的链接器错误。我已经尝试在LDFLAGS 中设置库,但它会产生相同的结果。当我手动编译它并将源文件和 -o 选项放在库之前时,它编译没有问题。
从其他线程中,我认为命令的顺序可能很重要,但我想知道为什么它在某些机器上有效,而在其他机器上却没有。即使顺序很重要,我认为make 足够聪明,可以自己解决。
现在的问题是:我该如何解决这个问题?我必须使用不同版本的 make 或 ld 吗?我必须修改我的 makefile 吗?
提前致谢!
【问题讨论】:
标签: c++ g++ makefile ld clang++