我正在使用c ++代码进行物理模拟,它使用了很多外部库(比如GSL和cern的ROOT)。尝试重新编译项目我遇到链接问题。通过以下方式运行最终文件的编译时:
g++ -fno-inline -O2 -fpic -o main.out ${ROOTINCS} main.o ext.o ${ROOTLIBS} $(objects2)
with:
我遇到了恼人的错误:
/usr/bin/ld: /usr/local/lib/root/libHist.so: undefined reference to symbol 'gRandom'
/usr/local/lib/root/libMathCore.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
问题是nmC运行在libMathCore状态' gRandom'在那里宣布。 -lMathCore也出现在我的命令行中。
当我运行ld以检查它是否理解该标志时:
ld -L/usr/local/lib/root -lMathCore --verbose 2>/dev/null
它没有抱怨并尝试正确链接。
根据https://stackoverflow.com/a/24675715/3602168库的顺序在我的链接中是正确的(libHist使用libMathCOre,因此首先说明)。
编译在ubuntu 14.04,64位
上的g ++ 4.8.2下运行答案 0 :(得分:0)
将评论转换为答案:
您是否尝试在$(objects2)
之前移动${ROOTLIBS}?
我认为问题可能是您在使用它们的目标文件之前指定了库。