未定义的引用错误,即使在指定-L和-l标志之后也是如此

时间:2013-08-05 06:51:21

标签: c++ undefined-reference

我正在尝试编译此包并继续获取对错误的未定义引用。我复制并编辑了makefile中的最终编译器代码,以确保在其他库之前调用所需的外部库。

这是错误,

<path>/libqroot.so: undefined reference to `TLatex::TLatex()'

TLatex.h位于<path>/ROOT/includeTLatex在库格拉夫(libGraf.so)中定义,位于<path>/ROOT/lib

这是命令,

g++ file.cxx -Wall -g  -ggdb -fPIC -pthread -m64
-I<root-path>/ROOT/include 
-I/usr/include 
-I./ 
-I/usr/include 
-I<root-path>/ROOT/include 
-I<project-path>/pkg/base/ 
-I<project-path>/pkg/dianaglobal/ 
-I<project-path>/pkg/globalrw/ 
-I<project-path>/pkg//coretools/ 
-L<project-path>/lib 
-L<root-path>/ROOT/lib 
-lqroot -lcoretools -lmathtools -lbase -lgsl -lgslcblas-lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -pthread -lm -ldl -rdynamic -lGeom -lMinuit -lSpectrum -lMathMore -lMathCore -lThread -lRootAuth -lFoam
-o <project-path>/bin//file

显然没有新行字符。

请帮我弄清楚是什么问题。

谢谢。

1 个答案:

答案 0 :(得分:1)

首先确保传入-lGraf,如果符号位于libGraf.so中。链接线的顺序很重要。对于g ++,包含函数定义的库应出现在使用它的任何源文件或目标文件之后。因此,鉴于您所看到的错误:

-lqroot -lGraf -lcoretools -lmathtools -lbase -lgsl -lgslcblas

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#Link-Options

在您编辑之后,如果您的头文件与您的库不匹配,则会发生此错误。