The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Линковка разделяемых библиотек"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Линковка разделяемых библиотек"  
Сообщение от oaealex on 07-Дек-07, 12:16 
Есть разделяемая библиотека - .so модуль.
Все с ним хорошо - загружается, функции вызываются.
Один прикол - Во время компиляции библиотеки не все необходимы модули прилинкованы - указаны в маке файле. Компиляция происходит успешно, а то, что есть неразрешенные ссылки мы узнаем только тогда, когда делается dlopen.
Что, в Линухе - разделяемая библиотека может пользоваться классами в основном модуле и ругачка происходит - только когда "на лету" этого нельзя сделать ?
Если это не так - то почему компилятор не "ругается" во время линковки so модуля ?
По идее, даже если указана опция -fPIC - линковщик должен был об этом сказать.
А то получается - об неразрешенных связях я не знаю до самого момента згрузки.


компиляция .so модуля
с++ -с main.cpp -o main.o -fPIC

линковка .so модуля
с++ main.o -o main.so -fPIC -shared

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Линковка разделяемых библиотек"  
Сообщение от jd (??) on 08-Дек-07, 06:32 
>Компиляция происходит успешно, а то, что
>есть неразрешенные ссылки мы узнаем только тогда, когда делается dlopen.

А как, по вашему, компилятор узнает во время линковки, с какими аргументами будет вызвана функция dlopen? Есть разница: прилинковать библиотеку или открыть её (dlopen) во время выполнения. dlopen нужна в тех случаях, когда на этапе линковки неизвестно, какая библиотека будет использоваться. Наглядный пример - плагины, которых может быть произвольное количество. А может и вовсе не быть.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Линковка разделяемых библиотек"  
Сообщение от oaealex on 10-Дек-07, 08:02 
>>Компиляция происходит успешно, а то, что
>>есть неразрешенные ссылки мы узнаем только тогда, когда делается dlopen.
>
>А как, по вашему, компилятор узнает во время линковки, с какими аргументами
>будет вызвана функция dlopen? Есть разница: прилинковать библиотеку или открыть её
>(dlopen) во время выполнения. dlopen нужна в тех случаях, когда на
>этапе линковки неизвестно, какая библиотека будет использоваться. Наглядный пример - плагины,

Вот про них - про плагины - и речь.  И dlopen - такой как в мане с именем библиотеки.
Но дело не в dlopen- он то как раз делает свою работу и делает ее хорошо.

Напрягает то, что линковщиком библиотеки не контролируется наличие неопределенных ссылок. Былобы конечно "круто"  в данном случае, чтобы сам dlopen находил эти ссылки в модуле основной программы - только слабо представляю себе как это будет выглядеть физически
Но можно успокоиться - этого не происходит.
Поэтому и непонятка - почему линковщик вдруг делает за меня предположения - что те функции которые я использую - чудесным образом найдутся в момент dlopen ???.

Ведь когда делается ИСПОЛНЯЕМЫЙ модуль - он с этой задачей справлятся замечательно.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Линковка разделяемых библиотек"  
Сообщение от DeadMustdie email(??) on 09-Дек-07, 15:58 
Це видно человека с опытом разработки под Win32.
Идеология работы с разделяемыми библиотеками под UNIX другая. Действительно, часть символов может быть недоступна на этапе линковки и предоставляться уже при загрузке библиотеки в основную программу.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Линковка разделяемых библиотек"  
Сообщение от oaealex on 10-Дек-07, 08:06 
>Це видно человека с опытом разработки под Win32.

Угу :) Простите пожалуста :)
>Идеология работы с разделяемыми библиотеками под UNIX другая. Действительно, часть символов может
>быть недоступна на этапе линковки и предоставляться уже при загрузке библиотеки
>в основную программу.

Во веселуха - узнать что ты чтото не прилинковал в плагин -
на этапе работы приложения. Тут такого можно огрести - мало не покажется.
Поэтому и есть подозрение что данный вопрос должен быть красиво решен
на этапе линковки. Только неизвестно - а как ?.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Линковка разделяемых библиотек"  
Сообщение от phpcoder email(??) on 11-Дек-07, 11:38 
[...]
>Поэтому и есть подозрение что данный вопрос должен быть красиво решен
>на этапе линковки. Только неизвестно - а как ?.

Попробую предположить: ldd --as-needed ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Линковка разделяемых библиотек"  
Сообщение от oaealex on 11-Дек-07, 12:37 

>Попробую предположить: ldd --as-needed ?

Нет такого ключа в опциях. Да и нужно сообщение "при линковке" от gcc .


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру