Связывание сторонних общих библиотек без soname, имени компоновщика - PullRequest
3 голосов
/ 29 мая 2011

Установка liboost-dev в Debian Squeeze дает мне несколько библиотек, таких как /usr/lib/libboost_thread.so.1.42.0, но не libboost_thread.so. Теперь я не могу связать, используя -l флаг gcc / ld, потому что имена не заканчиваются на .so.

Я заметил, что /usr/lib имеет множество других библиотек вида libfoo.so.N без libfoo.so, так что это не свойственно Boost. В итоге я добавил вручную ссылки libboost_thread.so.1 и libboost_thread.so символические ссылки. (Страница man для ldconfig предполагает, что он добавит ссылки, но ничего не сделал).

Все работает нормально, но кажется грязным. Что я должен был сделать?

  • используйте более конкретную опцию компоновщика, которую я еще не нашел (стоимость создания моих make-файлов зависит от конкретного номера версии).
  • просто добавьте символические ссылки вручную (риску подорвать управление пакетами).
  • какой-то другой Debian 'правильный способ' сделать это.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Вы установили пакет времени выполнения libboost-thread1.42.0, но пакет development libboost-thread-dev (или даже универсальный пакет libboost-all-dev.

Как только вы получите соответствующий пакет -dev, связь будет работать. Это общая особенность большинства дистрибутивов Linux - вы почти никогда не хотите связываться с символическими ссылками вручную.

Редактировать: В ответ на ваш комментарий:

edd@max:~$ ls -l /usr/lib/libboost_thread.*
-rw-r--r-- 1 root root 176324 2010-10-21 00:56 /usr/lib/libboost_thread.a
lrwxrwxrwx 1 root root     25 2011-05-14 10:17 /usr/lib/libboost_thread.so -> \
                                                        libboost_thread.so.1.42.0
-rw-r--r-- 1 root root  88824 2010-10-21 00:56 /usr/lib/libboost_thread.so.1.42.0
edd@max:~$ dpkg -S /usr/lib/libboost_thread.so
libboost-thread1.42-dev: /usr/lib/libboost_thread.so
edd@max:~$ 

Очевидно, что система управления пакетами создала ссылки и владеет ими.

0 голосов
/ 18 октября 2018

Ответ Дирка верен в отношении общего принципа, но, похоже, есть дополнительная ловушка для неосторожных с буст-пакетом.

Обычно заголовки и символическая ссылка библиотеки находятся в одном пакете, поэтомуБиблиотека символических ссылок, не задумываясь об этом.Тем не менее, с boost "libboost -dev" предоставляет заголовки, а "libboost- -dev" предоставляет символическую ссылку на общую библиотеку.Так что если вы устанавливаете только первый, вы получаете материал, который компилируется, но не связывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...