как использовать мою собственную динамическую библиотеку в linux (Makefile)

У меня есть проект 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 и ее ссылок и оставить все там, пока я не сделаю «установить», чтобы установить их в другие указанные каталоги? Теперь будет круто, как это сделать стандартным способом.

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

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


person Community    schedule 21.08.2009    source источник


Ответы (2)


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

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

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

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

person nos    schedule 21.08.2009

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

person kazanaki    schedule 24.08.2009
comment
+1 Использование libtool облегчит задачу, когда вы в конечном итоге решите перенести его с Linux на что-то другое - libtool решает все проблемы, связанные с общими библиотеками, зависящие от платформы. - person Chris Lutz; 24.08.2009