2012-06-12 2 views
0

Я хочу использовать одну программу как общую библиотеку для другой программы.Неопределенная ссылка при использовании разделяемой библиотеки

Я начал следующим образом: У меня есть приложение, которое я скомпилированные с помощью:

/usr/bin/g++ -I/usr/include/libxml2 -Xlinker -zmuldefs -fPIC -c a.cpp 
/usr/bin/g++ -I/usr/include/libxml2 -Xlinker -zmuldefs -fPIC -c b.cpp 
/usr/bin/g++ -I/usr/include/libxml2 -Xlinker -zmuldefs -fPIC -c c.cpp 

Затем я создал общую библиотеку объектов из объектов, которые я получаю из этого файла с помощью следующей команды:

g++ -fPIC -Xlinker -zmuldefs -shared -o libabc.so a.o b.o c.o 

После этого я получаю libabc.so файл, который я копирую в

sudo cp libabc.so /usr/local/lib/libabc.so 

Теперь, когда я компилирую мое приложение Orignal, который будет использовать эту вновь созданную библиотеку libabc.so с помощью этой команды:

/usr/local/lib/libabd.so: undefined reference to `xmlXPathNewContext' 

я получаю ошибки для всех функций, которые я использовал из включенного библиотеки libxml2 в первом приложение и функция, которая имеет эту неопределенную ссылку, на самом деле является библиотекой, которую я включаю в первую программу, я имею в виду, что я ее протестировал. Так любезно, что я направляю меня туда, где мне нужны исправления.

ответ

0

Возможно, вам придется пройти путь, используя также -I/path/to/library, или же экспортировать его в LD_LIBRARY_PATH.

+0

Я пробовал это, но он все еще говорит, что '/usr/include/lib/libabc.so: неопределенная ссылка на« xmlXPathNewContext »' – hasanalikhattak

0

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

+0

Мы не можем больше помочь, не имея более подробной информации: является ли 'libxml2' установленной системой (например, есть ли файл'/usr/lib/libxml2 * so')? Какова командная строка, используемая для создания вашего приложения? Если вы попытаетесь использовать некоторые функции 'libxml2' непосредственно из вашего приложения, может ли компоновщик решить эти ссылки? –

+0

libxml2 - это библиотека '$ ls -h/usr/lib/libxml2. *' возвращает '/usr/lib/libxml2.a /usr/lib/libxml2.so /usr/lib/libxml2.so.2.7 .8 /usr/lib/libxml2.la/usr/lib/libxml2.so.2' Я использовал эти команды для создания своего приложения '/ usr/bin/g ++ -I/usr/include/libxml2 - Xlinker -zmuldefs -fPIC -c neoclassic.cc' – hasanalikhattak

+0

, когда я использовал '-llibxml2', он дает ошибку '/usr/bin/ld: не удается найти -llibxml2' – hasanalikhattak

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