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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> gcc проблемы с подключением библиотек 
:(
    Опции темы
EvgeniyK77
Дата 19.8.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Привет!

Недавно занялся программированием под QNX 6 (компилятор gcc (версия 2.xxx)). И столкнулся с проблемой подключения библиотек (если они пользуются функциями друг друга) при создании исполняемого файла.

Вот простой пример. 

- Создал библиотеку 1 (libsimple1.a). Пусть она состоит из единственной функции int Fun1(), которая просто вернёт единицу.

- Создал библиотеку 2 (libsimple2.a). Она также включает в себя единств. ф-ю int Fun2(). Но эта ф-я пользуется ф-й Fun1 из первой библиотеки, например возвращает Fun1() + 2.

- Теперь пытаюсь собрать программу (simple_prog), которая ... да хоть просто распечатает то, что вернёт Fun2 из второй библиотеки.  Так вот, если в строке линковки этой simple_prog указать сначала -lsimple2 -lsimple1, то всё прекрасно линкуется, а если библиотеки поменять местами (-lsimple1 -lsimple2), то линковщик выдаёт undefined reference.

Так вот вопрос то. Как указать линковщику, что бы он "лучше" просматривал подключаемые библиотеки?

PS Реально ситуация неприятнее. У меня есть три библиотеки и они пользуются функциями друг друга. Когда компилировал watcom-овским компилятором под QNX 4, то проблем не было.


PM MAIL   Вверх
Serge
Дата 19.8.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(EvgeniyK77 @ 19.8.2006,  08:20)

...
- Теперь пытаюсь собрать программу (simple_prog), которая ... да хоть просто распечатает то, что вернёт Fun2 из второй библиотеки.  Так вот, если в строке линковки этой simple_prog указать сначала -lsimple2 -lsimple1, то всё прекрасно линкуется, а если библиотеки поменять местами (-lsimple1 -lsimple2), то линковщик выдаёт undefined reference.

Так вот вопрос то. Как указать линковщику, что бы он "лучше" просматривал подключаемые библиотеки?

Это нормальное поведение gcc.. 
Цитата(Программирование для Linux. Профессиональный подход.)

Иногда между двумя библиотеками образуется зависимость. Другими словами , первый архив ссылается на символические константы, определенные во втором архиве, и наоборот. Такая ситуация, как правило, является следствием неправильного проектирования. В этом случае нужно указать в командной строке одну и ту же библиотеку несколько раз. Компоновщик просмотрит библиотеку столько раз, сколько она присутствует в командной строке. Пример:

Код

gcc -o app app.o -lfoo -lbar -lfoo


Теперь, даже если библиотека libfoo.a ссылается на символические константы в библиотеке libbar.a и наоборот, программа будет успешно скомпилирована.

PM MAIL ICQ   Вверх
bilbobagginz
Дата 19.8.2006, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



видимо пришло время познакомиться с разницей между статическим архивом функлий *.a и динамически связываемой библиотекой, *.so

пока.


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

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

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


 




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


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

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