2014-11-30 3 views
4

я пытаюсь получить библиотеку для работы в моей C Project ++ и нет никаких четких инструкций о том, как сделать это для людей, которые не привыкли к C++Ссылка .so файл в .cpp файл через г ++ составителя

следующее link является ближайшим я пришел

говорится следующее

-L/path/to/my/library/folder -ldllname 

также следующие thread состояний следующие

gcc yourfile.cpp -lblah 

теперь от того, что я могу видеть, эта команда -l + filename, например, мое имя файла directory/libtest.so было бы -ldirectory/libtest.so, это правильно, может кто-то прояснить

я в настоящее время с помощью следующей команды для компиляции моего maincpp.cpp файл, хотел бы, однако включать .so файл с именем, например ./directory/libtest.so

g++ -fPIC -o libgetmacip.so -shared -I $JAVA_HOME/include -I $JAVA_HOME/include/linux maincpp.cpp cpptoinclude.cpp 
+0

Вы должны иметь в виду, что предоставление динамической библиотеки двоичному означает просто указать, что этот двоичный файл во время выполнения должен быть связан с * библиотекой этого имени * (не * эта * библиотека). Во время выполнения такая библиотека должна присутствовать в * системе * (например, в LD_LIBRARY_PATH), поэтому нет смысла указывать для нее определенный каталог. – Alfe

ответ

11

теперь от того, что я могу видеть, эту команду -l + filename, например, мое имя файла я с directory/libtest.so будет -ldirectory/libtest.so

Нет, это неправда. Она должна быть -Ldirectory -ltest т.е. использовать -L, чтобы добавить каталог в пути поиска, где компоновщик будет искать библиотеки, а вы говорите, какие библиотеки для ссылки с -l, но связать с libtest.so или libtest.a вы говорите -ltest без префикса lib или расширение файла.

Вы может ссылки, называя файл в явном виде, без -L или -l вариантов, то есть просто directory/libtest.so, но для динамических библиотек, которые почти всегда неправильно, что нужно сделать, как это встраивание точного пути к исполняемому файлу, так одна и та же библиотека должна находиться в том же месте, когда запускается программа. Обычно вы хотите связать его по имени (а не по пути), чтобы библиотека с этим именем могла использоваться из любого места во время выполнения.

+0

bravo, спасибо! тем не менее, самая отсталая команда, которую я еще видел, какая ненужная трата. я бы не хотел даже думать о том, сколько людей застряло с этим –

+0

Ну, это довольно четко документировано, если вы потрудитесь прочитать документы GCC https://gcc.gnu.org/onlinedocs/gcc/Link-Options. html –

+1

Также имейте в виду, что вы не будете _include_ .so в своем собственном .so, вы просто ссылаетесь на него, заставляя ваш .so зависеть от другого, а не включать его содержимое. –

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