ldconfig не видит пользовательскую библиотеку - PullRequest
0 голосов
/ 17 февраля 2012

Мы создали пользовательскую разделяемую библиотеку из некоторого кода C ++, используя

g++ -c -fPIC customTest.cpp

g++ -shared -o libcustomTest.so customTest.o

И мы поместили ее в каталог проекта, и в нашем make-файле у нас по умолчанию есть цель

main: main.o
    nvcc $^ -o main -lcustomTest -L.

И это прекрасно работает.

Проблема в том, что мы хотели бы переместить нашу библиотеку в /usr/lib/ или в любую произвольную папку и при этом программа должна найти ее и использовать, но этого не произошломы хотим, чтобы это было.

В нашем корне есть папка, которую мы создали, которая называется libTest, и в эту папку мы помещаем нашу библиотеку customTest.so.0.1.Затем мы отредактировали ld.so.conf в /etc/, чтобы в нем было /libTest.

Затем мы пошли в каталог наших программных файлов и запустили ldconfig -v

, который выглядел так, нобольше

libpanel.so.5 -> libpanel.so.5.9
libt1.so.5 -> libt1.so.5.1.2
libbluetooth.so.3 -> libbluetooth.so.3.11.4
libgck-1.so.0 -> libgck-1.so.0.0.0
libdca.so.0 -> libdca.so.0.0.0

создано много ссылок, а что нет, но libcustomTest.so не является одной из них.Не удивительно, что когда мы запускаем make, пользовательская библиотека не может быть найдена.

Может ли кто-нибудь указать нам правильное направление с тем, что мы делаем неправильно?Кстати мы на Ubuntu 11.10

1 Ответ

1 голос
/ 18 февраля 2012

g ++ -shared -o libcustomTest.so customTest.o

Это создаст общую библиотеку с SONAME не установленным.

У нас в корневом каталоге есть папка libTest, в которую мы поместили нашу библиотеку customTest.so.0.1

.

Не делай этого. Просто скопируйте libcustomTest.so в / libTest и покончите с этим.

создано много ссылок, а что нет, но libcustomTest.so не является одной из них.

Это ожидаемый результат. ldconfig создает символические ссылки из SONAME в бинарный файл фактической реализации. Поскольку вы не установили SONAME, символическая ссылка для вас отсутствует.

Если вы не понимаете , для чего SONAME, не задавайте его (с помощью флага -Wl,--soname=...) В Linux SONAME и управление версиями во внешних библиотеках обычно являются неправильным ответом, поскольку управление версиями символов в любом случае обеспечивает гораздо лучший подход.

...