2010-02-18 3 views
5

Im используя QMAKE построить общую библиотеку на Ubuntu 9.10проблемы л.д. сцепления:/USR/бен/л.д.: не может найти [LibraryName]

Эта общая библиотека (A) имеет зависимость от другой общей библиотеки (B) ,

проект B был успешно построен.

в .pro файле для проекта А, моя переменная LIBS выглядит следующим образом:

LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0 

(я использовал полное имя shlib, поскольку версии библиотек различны.)

В любом случае, когда я пытаюсь построить проект а, он ломает на этапе сцепления, и выводит сообщение об ошибке:

/usr/bin/ld: cannot find -llibdatelib_release.so.1.0.0 
collect2: ld returned 1 exit status 
make[1]: ***[bin/libprojecta_release.so.6.0.0] Error 1 
make ***[release] Error 2 
Exited with code 2 

Из сообщения об ошибке, я думал, л.д. жаловался, что не может л ocate файл libdatelib, поэтому я вручную скопировал его в/usr/lib/

Однако это не решило проблему, и я получаю то же сообщение об ошибке.

Кто-нибудь знает, как это исправить?

[Редактировать]

Я совершенно новой для строительства с использованием GCC. Я знаю, как создавать символические ссылки, но какие пути я использую для команды lnk ?. Файл, к которому я хочу установить ссылку, находится в/home/username/work/cppdev/datelib/bin.

Также система сборки я использую (QMAKE), автоматически создает символические ссылки как часть сборки, так что у меня уже есть следующие файлы в моей/дома/имя пользователя/работа/cppdev/datelib/бен папку:

  • libdatelib_release.so (ссылка SYM)
  • libdatelib_release.so.1 (SYM ссылка)
  • libdatelib_release.so.1.0 (SYM ссылка)
  • libdatelib_release.so.1.0.0 (общий Lib)

Возможно, мне придется задать другой вопрос, чтобы объяснить, почему существует так много символических ссылок (что такое точка?), И почему я не могу просто ссылаться непосредственно на общую библиотеку, но должен пройти символическую ссылку. Я читал некоторые онлайн-документы, но то, что я видел до сих пор, скорее похоже на dictum/традицию, а не на фактические технические причины. ПОЧЕМУ этот уровень абстракции требуется при подключении к Linux.

+0

Я не эксперт по созданию и связывая под Linux и часто имели подобные проблемы в вашей. Однако я рекомендую следующую отличную статью о работе с общими библиотеками в IBM DeveloperWorks: [** _ Распаковка разделяемых библиотек - узнайте свою общую библиотеку _ ** (автор Peter Seebach)] [seebach]. Раздел _ «Изменение пути поиска динамического компоновщика» _ может быть особенно интересен для вас. [seebach]: http://www.ibm.com/developerworks/linux/library/l-shlibs.html – stakx

ответ

9

Вы не можете использовать -l таким образом. -l можно найти только такие вещи, как libFOO.so, через -lFOO. Вам нужна символическая ссылка без номера версии, если вы хотите указать ее так же, как в сборке.

Что-то вроде:

ln -s /the/path/to/the/libthing.so.1.0.0 /the/path/to/the/libthing.so 

Теперь -lthing будет работать.

+0

Извините, я новичок в создании Linux. Я знаю, как создавать символические ссылки, но какие пути я использую для команды lnk ?. Файл, к которому я хочу установить ссылку, находится в/home/username/work/cppdev/datelib/bin –

3

Приставка «Lib» автоматически добавляется к имени библиотеки - использование:

LIBS += -L../datelib/bin -ldatelib_release.so.1.0.0 
+0

Эта работа для меня ... –

0

Вы можете указать полный путь. т.е.

LIBS += ../datelib/bin/libdatelib_release.so.1.0.0 

Однако я бы рекомендовал вам делать то, что bmargulies предложил: создать symolic ссылку и добавить -ldatelib_release

+0

Эта работа для меня ... –

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

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