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

Undefined reference error, even after specifying -L and -l flags

本文关键字:标志 错误 引用 未定义      更新时间:2023-10-16

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

这是错误,

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

TLatex.h<path>/ROOT/includeTLatex在库 Graf(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

显然没有换行符。

请帮我弄清楚出了什么问题。

谢谢。

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

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

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

进一步编辑,如果您的头文件与您的库不匹配,则会发生此错误。