![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
ashain |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 3.7.2011 Репутация: нет Всего: 1 |
Вопрос в общем то таков, есть ли возможность подключить библиотеку lib***.a динамически как lib***.so, не добавляя её в исходный файл? Либо нужна обязательная перекомпиляция библиотеки?
|
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
Статические библиотеки потому и называются статическими, что не подключаются динамически!
При статической компоновке линкер ищет символы в статической библиотеке, а при динамической "верит", что они будут доступны из динамической библиотеки. Это сообщение отредактировал(а) Cheloveck - 21.8.2012, 12:19 -------------------- ![]() |
|||
|
||||
ashain |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 3.7.2011 Репутация: нет Всего: 1 |
Да, но ведь символы доступны и в статической библиотеке... Хотя из ответа я понял, что невозможно сделать динамическую линковку статической либы.. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: нет Всего: 32 |
В общем случае, статическая либа является объектным файлом, а динамическая имеет в заголовке таблицу символов. Это сообщение отредактировал(а) Cheloveck - 21.8.2012, 12:42 -------------------- ![]() |
|||
|
||||
tzirechnoy |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
Есть. Во-первых, можно при помощи ld из .a собрать .so. Ну, такжэ, как обычные .so собирают. В линуксе дажэ заработает -- там единственный косяк, что memory-mapped file для кода использоваться не будет, весь в память запихнётся и своп забьёт. Но это мелочи, на самом деле.
Во-вторых, исходники ld -- открыты, в freebsd и dietlibc они дажэ довольно банальны. Никакого rocket science, открываешь файл, читаешь заголовки, в соответствии с заголовками -- читаешь и правишь содержымое, подставляешь в свои таблицы полученные адреса. Напишы (допили diet-ский) ld для загрузки .a, и оформи в свою библиотеку. PS И да, фразу "не добавляя в исходный файл" я вообще не понял, но понадеялся, что она здесь не важна. |
|||
|
||||
ashain |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 3.7.2011 Репутация: нет Всего: 1 |
Под исходным файлом имел ввиду файл использующий библиотеку... Хотя наверное не совсем корректно звучит, да и действительно не суть... Спасибо за остальную информацию, будем смотреть. |
|||
|
||||
ashain |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 3.7.2011 Репутация: нет Всего: 1 |
Спасибо за наводку о конвертации, всё оказалось банально просто:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |