Ошибка поиска в библиотеке g ++ - PullRequest
1 голос
/ 24 марта 2012

У меня есть структура каталогов, как показано ниже:

/
|
+--- /lib
|      libsomething.a
|      libsomething.so
|
+----/obj
       anObjFile.o

Когда я запускаю следующую команду из каталога obj:

g++ -L../lib -lsomething anObjFile.o

Iполучить undefined reference ошибок.Очевидно, gcc не может найти libsomething.a.

Но теперь, если я удаляю libsomething.so, а затем снова запускаю команду, связывание происходит успешно.

Согласно документации gcc -lsomething должен быть расширен до libsomething.a.Тогда почему наличие libsomething.so приводит к сбою поиска в библиотеке?Кроме того, как я могу решить эту проблему?

Я на Linux Mint 12 с gcc версии 4.6.1.

1 Ответ

1 голос
/ 24 марта 2012

.so файл является динамической библиотекой, то есть он используется каждый раз, когда вы запускаете вашу программу. В этом случае вам нужно сообщить вашей ОС (в данном случае Mint), где находится эта динамическая библиотека, чтобы ваша программа могла найти ее во время выполнения.

Файл .a является статической библиотекой, то есть необходимые функции будут скопированы в вашу программу при компоновке. Таким образом, ваша программа может работать без файла библиотеки.

Если больше ничего не сказано, gcc будет считать, что вы хотите использовать динамическую библиотеку lib. Если он может найти файл .so, он будет использовать его вместо файла .a. Если вы хотите, чтобы gcc сделал вашу программу статичной (используйте файл .a), вы можете добавить -static к вашему вызову gcc.

Однако причина сбоя связывания при использовании динамической библиотеки неясна. Как вы установили / собрали библиотеку?

...