未定义的引用错误,即使在指定 -L 和 -l 标志后也是如此
Undefined reference error, even after specifying -L and -l flags
我正在尝试编译这个包,并不断获得对错误的未定义引用。我在 makefile 中复制并编辑了最终编译器代码,以确保在其他库之前调用所需的外部库。
这是错误,
<path>/libqroot.so: undefined reference to `TLatex::TLatex()'
TLatex.h
在<path>/ROOT/include
, TLatex
在库 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
进一步编辑,如果您的头文件与您的库不匹配,则会发生此错误。
相关文章:
- 有关使用标志位设置内部错误标志的说明
- Clang:覆盖之前在命令行上指定的所有警告和错误警告标志
- std::function, Clang 6.0 & MSVC (10.0017134.12) - 可能的 ABI 错误或必需的编译器标志
- 为什么在编译过程中尽管有 -I(破折号大写 i)标志,但仍会出现未定义的引用错误?
- 为什么我必须将错误状态标志设置为 goodbit 才能使其工作
- C - iStream错误标志
- 链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
- 安装XLNT后,具有-lxnt标志的G 错误
- 用错误的标志顺序编译后,是否删除*.cpp文件
- 可以清除流的单个错误状态标志
- std::ostringstream将标志放在错误的位置
- 为什么std::istringstream在没有引发故障位标志的情况下生成错误的结果
- 优化标志会导致计算错误
- 使用 ios::Nocreate 标志会导致"undeclared identifier"错误
- 标志 ios_base::app 的错误行为
- GCC 错误错误的 ELF 类:ELFCLASS64,尽管有 -m64 标志
- 异常是否应具有标志/消息,或者每个错误应具有异常类型
- OpenCV错误:cvGetMat中有错误的标志(参数或结构字段)(无法识别或不支持的数组类型)
- 带有DEBUG_PROCESS标志的CreateProcess会在某些可执行文件上导致错误50
- 调试使用调试标志运行的代码,并使用 opt 标志运行段错误