Связывание с общими и статическими библиотеками с помощью C++ в системе Linux.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Связывание с общими и статическими библиотеками с помощью C++ в системе Linux.

Сообщение Anonymous »

Я возился с тестовым проектом, назовем его mytest, у него есть файлы .cpp и .h, содержимое не особо важно — представьте, что он содержит несколько простых hello_world() функции типа...

Итак, я создал общий make-файл, чтобы скомпилировать его в различные выходные данные библиотеки, где на моем выходе есть ls -l папка дает:

Код: Выделить всё

libmytest.a
libmytest.so -> libmytest.so.1.0
libmytest.so.1 -> libmytest.so.1.0
libmytest.so.1.0
Пока все хорошо, мои общие/статические библиотеки созданы.

Теперь у меня есть make install< Цель /code> в моем файле make, которая в основном копирует заголовок в /usr/local/include и все эти файлы библиотеки в /usr/local/lib

Затем я создал еще один тестовый файл cpp под названием usertest.cpp (извините за не очень образные/описательные имена), который ссылается на файлы библиотеки.

Я собирал разными способами:
Затем я удалил файлы libmytest.so*, поэтому в /usr/ остался только файл библиотеки libmytest.a. local/lib Затем я проделал тот же тест:
Наконец, я удалил файл libmytest.a и скопировал обратно файлы .so, поэтому У меня были только файлы библиотеки libmytest.so* в /usr/local/lib. Затем я провел тот же тест:
Результаты размера файла (в байтах):

Код: Выделить всё

1. 7736        - Makes sense, all libs dynamically linked
2. 19674488    - Makes sense, all libs statically linked
3. 64908       - hmm... not really sure why
4. 19674488    - Makes sense, same as 2.
5. 7736        - Makes sense, same as 1.
6. failed      - Makes sense, no .so files!
У меня есть файлы трех размеров, маленький (7736) полностью динамически скомпонован. Большой статически связан.... что это за средний (64908)? Итак, у меня есть вопросы:
  • для 1. Я полагаю, что система сначала ищет библиотеки .so, а затем библиотеки .a?
  • Для 3. Что здесь произошло? - он динамически связывает системные библиотеки, но когда он видит мою .a-библиотеку, он динамически связывает ее?
Примечание


Примечание все выходные данные работают нормально и вызывают функции из библиотеки.

Подробнее здесь: https://stackoverflow.com/questions/478 ... nux-system
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»