2016-07-13 9 views
0

Я пытаюсь собрать некоторые C++ файлы с помощью г ++, проблемы, эти файлы зависит от обоих libxml2 и GSL библиотек, при е я дать команду компиляции
g++ -Wall -I/usr/include/libxml2 -lgsl main.cpp YUNucNet.cpp src/*.cpp -lxml2 -lmнеопределенная ссылка на `gsl_vector_free»

это alaways дана подробная мне много ошибок связывания неопределенного справочника для 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 

В чем проблема?

+1

Возможный дубликат [Почему порядок, в котором связаны библиотеки, иногда вызывает ошибки в GCC?] (Http://stackoverflow.com/questions/45135/why-does-the-order-in-which-libraries- являются связи, иногда-причинно-ошибка-в-НКИ) –

ответ

1

Длинная короткая история: библиотека -lgsl должна быть после вашего КППСА в командной строке, то есть:

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

Вы можете позвонить г ++ с опцией -v чтобы увидеть, что происходит под капотом, чем вы увидите , что компоновщик вызывается с -lgsl перед вашими скомпилированными объектными файлами. Таким образом, библиотека -lgsl будет продолжена компоновщиком до объектных файлов, и компоновщик отбросит все функции из библиотеки, потому что до этого момента он не знает, что они необходимы. Только позже, работая через ваши объектные файлы, он будет знать, что функции из библиотеки действительно нужны, но уже слишком поздно.

 Смежные вопросы

  • Нет связанных вопросов^_^