未定义对“gsl_vector_free”的引用

undefined reference to `gsl_vector_free'

提问人:M.Talafha 提问时间:7/14/2016 更新时间:7/14/2016 访问量:1995

问:

我正在尝试使用 g++ 编译一些 c++ 文件,这些文件同时依赖于 libxml2 和 gsl 库的问题,当我给出编译命令时
g++ -Wall -I/usr/include/libxml2 -lgsl main.cpp YUNucNet.cpp src/*.cpp -lxml2 -lm

它给了我许多未定义 GSL 引用的链接错误

'/tmp/ccCJrl0t.o: In function `WnSparseSolve__Phi__solve:
WnSparseSolve.cpp:(.text+0x24bc): undefined reference to `gsl_vector_calloc'
WnSparseSolve.cpp:(.text+0x24cc): undefined reference to `gsl_vector_calloc'
WnSparseSolve.cpp:(.text+0x24e9): undefined reference to `gsl_vector_calloc'
WnSparseSolve.cpp:(.text+0x24ff): undefined reference to `gsl_vector_alloc'
WnSparseSolve.cpp:(.text+0x250f): undefined reference to `gsl_vector_calloc
....etc

这里有什么问题??

C++ 编译 未定义引用 GSL 链接器错误

答:

2赞 ead 7/14/2016 #1

长话短说:库必须在命令行中的 cpps 之后,即:-lgsl

g++ -Wall -I/usr/include/libxml2   main.cpp YUNucNet.cpp src/*.cpp -lxml2 -lgsl -lm

您可以使用选项调用 g++,以查看在编译的目标文件之前调用链接器时,在后台会发生什么,而不是您看到的。因此,链接器将在目标文件之前继续执行库,并且链接器将放弃库中的所有函数,因为到目前为止,它不知道需要它们。只有稍后,通过处理您的目标文件,它才会知道确实需要库中的函数,但为时已晚。-v-lgsl-lgsl