Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическая линковка статической либы 
V
    Опции темы
ashain
Дата 21.8.2012, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 3.7.2011

Репутация: нет
Всего: 1



Вопрос в общем то таков, есть ли возможность подключить библиотеку lib***.a динамически как lib***.so, не добавляя её в исходный файл? Либо нужна обязательная перекомпиляция библиотеки?
PM MAIL   Вверх
Cheloveck
Дата 21.8.2012, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Статические библиотеки потому и называются статическими, что не подключаются динамически!

При статической компоновке линкер ищет символы в статической библиотеке, а при динамической "верит", что они будут доступны из динамической библиотеки.

Это сообщение отредактировал(а) Cheloveck - 21.8.2012, 12:19


--------------------
user posted image
PM Jabber   Вверх
ashain
Дата 21.8.2012, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 3.7.2011

Репутация: нет
Всего: 1



Цитата(Cheloveck @ 21.8.2012,  12:17)
а при динамической "верит", что они будут доступны из динамической библиотеки.

Да, но ведь символы доступны и в статической библиотеке... 
Хотя из ответа я понял, что невозможно сделать динамическую линковку статической либы..
PM MAIL   Вверх
Cheloveck
Дата 21.8.2012, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: нет
Всего: 32



Цитата(ashain @  21.8.2012,  13:28 Найти цитируемый пост)
Да, но ведь символы доступны и в статической библиотеке

В общем случае, статическая либа является объектным файлом, а динамическая имеет в заголовке таблицу символов.

Это сообщение отредактировал(а) Cheloveck - 21.8.2012, 12:42


--------------------
user posted image
PM Jabber   Вверх
tzirechnoy
Дата 21.8.2012, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Есть. Во-первых, можно при помощи ld из .a собрать .so. Ну, такжэ, как обычные .so собирают. В линуксе дажэ заработает -- там единственный косяк, что memory-mapped file для кода использоваться не будет, весь в память запихнётся и своп забьёт. Но это мелочи, на самом деле.

Во-вторых, исходники ld -- открыты, в freebsd и dietlibc они дажэ довольно банальны. Никакого rocket science, открываешь файл, читаешь заголовки, в соответствии с заголовками -- читаешь и правишь содержымое, подставляешь в свои таблицы полученные адреса. Напишы (допили diet-ский) ld для загрузки .a, и оформи в свою библиотеку.

PS И да, фразу "не добавляя в исходный файл" я вообще не понял, но понадеялся, что она здесь не важна.
PM MAIL   Вверх
ashain
Дата 23.8.2012, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 3.7.2011

Репутация: нет
Всего: 1



Цитата(tzirechnoy @ 21.8.2012,  14:22)
Есть. Во-первых, можно при помощи ld из .a собрать .so. Ну, такжэ, как обычные .so собирают. В линуксе дажэ заработает -- там единственный косяк, что memory-mapped file для кода использоваться не будет, весь в память запихнётся и своп забьёт. Но это мелочи, на самом деле.

Во-вторых, исходники ld -- открыты, в freebsd и dietlibc они дажэ довольно банальны. Никакого rocket science, открываешь файл, читаешь заголовки, в соответствии с заголовками -- читаешь и правишь содержымое, подставляешь в свои таблицы полученные адреса. Напишы (допили diet-ский) ld для загрузки .a, и оформи в свою библиотеку.

PS И да, фразу "не добавляя в исходный файл" я вообще не понял, но понадеялся, что она здесь не важна.

Под исходным файлом имел ввиду файл использующий библиотеку... Хотя наверное не совсем корректно звучит, да и действительно не суть...
Спасибо за остальную информацию, будем смотреть.
PM MAIL   Вверх
ashain
Дата 23.8.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 3.7.2011

Репутация: нет
Всего: 1



Цитата(tzirechnoy @ 21.8.2012,  14:22)
Есть. Во-первых, можно при помощи ld из .a собрать .so. Ну, такжэ, как обычные .so собирают. В линуксе дажэ заработает -- там единственный косяк, что memory-mapped file для кода использоваться не будет, весь в память запихнётся и своп забьёт. Но это мелочи, на самом деле.

Спасибо за наводку о конвертации, всё оказалось банально просто:
Код

ar -x lib***.a
gcc -shared *.o -o lib***.so

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0863 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.