DSO在命令行中丢失,尽管它可用

时间:2014-08-16 22:37:45

标签: linker g++ ld

我正在使用c ++代码进行物理模拟,它使用了很多外部库(比如GSL和cern的ROOT)。尝试重新编译项目我遇到链接问题。通过以下方式运行最终文件的编译时:

g++ -fno-inline -O2 -fpic -o main.out ${ROOTINCS} main.o ext.o ${ROOTLIBS} $(objects2)

with:

  • objects2 =我们制作的许多.o文件
  • ROOTLIBS = -L / usr / local / lib / root -lTree -lRIO -lNet -lHist -lMathCore -lCore -lGraf -lGraf3d -lGpad -lMatrix -lThread -lCint -lPhysics -lPostscript -lRint -lSpectrum -lg < / LI>
  • ROOTINCS = -pthread -m64

我遇到了恼人的错误:

/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状态&#39; gRandom&#39;在那里宣布。 -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下运行

1 个答案:

答案 0 :(得分:0)

将评论转换为答案:

您是否尝试在$(objects2)之前移动${ROOTLIBS}?我认为问题可能是您在使用它们的目标文件之前指定了库。

相关问题