Объясните мне эти два шага, которые используются для создания общей библиотеки - PullRequest
1 голос
/ 04 ноября 2011

Я сделал эти шаги и создал общую библиотеку.но здесь у меня есть несколько вопросов

  1. Я хочу знать, почему мы пишем 4 и 5 шагов.

    Я знаю только, что эти шаги используются для библиотеки ссылок

  2. на 6-м шаге, почему мы используем только lhuffman вместо libhuffman

шагов:

1 gcc -c -fPIC filebits.c -o filebits.o
2 gcc -shared -Wl,-soname,libhuff.so.1 -o libhuffman.so.1.0.1 filebits.o
3 mv libhuffman.so.1.0.1 /home/mydesktop/slib/
4 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1  /home/mydesktop/slib/libhuffman.so
5 ln -sf /home/mydesktop/slib/libhuffman.so.1.0.1  /home/mydesktop/slib/libhuffman.so.1
6 gcc -o app app.c -lhuffman
7 ./app

объясните мне эти шаги

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Ваши параметры компоновщика неверны при сборке библиотеки:

-Wl,-soname,libhuff.so.1

должно быть

-Wl,-soname,libhuffman.so.1

Из подробного руководства :

-soname = name
[...] при запуске исполняемого файла динамический компоновщик будет пытаться загрузить общий объект, указанный в поле DT_SONAME, а не использовать имя файлапередается компоновщику.

1 голос
/ 04 ноября 2011
 1. i want know why we write 4 and 5 steps.

На шаге 4 вы создаете программную ссылку на имя библиотеки, которую компоновщик ищет для ссылки.
На шаге 5 вы создаете программную ссылку на библиотеку, указывающую ее major версию. Вам не нужно выполнять эти шаги как таковые, вместо этого вы можете сгенерировать libhuffman.so в качестве вывода на первом шаге, что и ищет компоновщик. Но это соглашение соблюдается, так что основные и вспомогательные версии библиотеки легко отслеживаются. Как правило, библиотека имеет имя library_name.MAJOR_VERSION.MINOR_VERSION. Существует мягкая ссылка на нее в виде library_name.MAJOR_VERSION и еще одна мягкая ссылка с library_name. library_name имеет вид lib [имя_библиотеки]. , поэтому , поскольку это формат, ожидаемый компоновщиком при использовании опции -l. Вы можете проверить библиотеки на вашем компьютере с Linux, и вы увидите, что это соглашение соблюдается во многих случаях. Эта ссылка предоставляет некоторые подробности относительно этого.

2.in 6th step why we use only lhuffman insted of libhuffman

компоновщик GCC добавляет lib & .a (или .so ) к имени библиотеки, указанному с помощью опции -l.
Надеюсь, это поможет!

...