Как использовать мою собственную динамическую библиотеку в Linux (Makefile) - PullRequest
5 голосов
/ 21 августа 2009

У меня есть проект на c ++ (g ++ / raw Makefile), предназначенный для Linux, я статически связывал все, что хорошо работало целую вечность. Теперь я хочу создать двоичные файлы, как статически, так и динамически связанные. Следующая команда используется в моем Makefile для сборки динамической библиотеки (скажем, libtest):

$ (CXX) -shared -Wl, -soname, libtest.so.1 -o libtest.so.1.0.0 $ (LIBTEST_OBJS)

Вывод: libtest.so.1.0.0 с так называемым libtest.so.1

Я обнаружил, что по крайней мере символическая ссылка libtest.so -> libtest.so.1.0.0 необходима для связи моей клиентской программы, которая фактически использует созданную выше библиотеку libtest.so.1.0.0.

Вот мой вопрос: если я хочу создать свое программное обеспечение, каков стандартный способ управления вышеуказанной символической ссылкой? Ясно, что я не хочу, чтобы этот дополнительный материал был в моем исходном каталоге, но он необходим для сборки моего двоичного файла клиента. Должен ли я создать его как временную ссылку для сборки клиента, а затем просто удалить его, когда закончите? или я должен создать каталог для размещения библиотеки generate .so и ее ссылок и оставить все там, пока я не выполню "make install", чтобы установить их в другие указанные каталоги? Будет круто сейчас, что является стандартным способом сделать это.

Или, может быть, неправильный способ создания библиотек? мне просто сгенерировать libtest.so (как настоящую библиотеку, а не ссылку), чтобы связать мой исполняемый файл, затем переименовать библиотеку и создать эти ссылки при выполнении `` make install ''?

Любой вклад будет оценен. :)

Ответы [ 2 ]

1 голос
/ 24 августа 2009

Я предлагаю использовать libtool , который обрабатывает подобные ситуации.

1 голос
/ 21 августа 2009

Конечно, не генерируйте libtest.so как фактическую ссылку. Обычно при установке файлов разработки совместно используемой библиотеки устанавливаются файлы .h и создается символическая ссылка libtest.so как часть некоторого сценария установки, который вам нужно написать.

Если вы не устанавливаете файлы разработки, а используете только библиотеку в процессе сборки вашего бинарного файла, вы просто создаете ссылку symbolik из своего make-файла.

Здесь не так уж много стандарта, некоторые предпочитают собирать артефакты в отдельный каталог сборки, некоторым все равно, встроен ли он в исходный каталог. Хотя я бы собрал в отдельный каталог и сохранил исходный каталог чистым от любых .o / .so / исполняемых файлов.

Вы можете найти полезную информацию здесь

...