LINUX.ORG.RU

Ошибки линковки gcc


0

0

Сразу говорю, что в программировании под Linux (Red Hat 9) я новичок.

Хотел создать простую программу на C++ в связи с имеющейся динамической библиотекой (исходных кодов, к сожалению, не имею), которая была откомпилирована еще на RedHat6.1 компилятором GCC:(GNU)egcs-2.91.66 19990314/Linux (egcs-1.1.2 release). Эту запись я нашел внутри кода самой DLL-ки.

Попробовал откомпилировать программку под KDevelop, настроив маршрут к динамической библиотеке и хедерам, но получил кучу сообщений:

gmake all-recursive gmake[1]: Entering directory `/home/lenja/lheed_a2ia' Making all in lheed_a2ia gmake[2]: Entering directory `/home/lenja/lheed_a2ia/lheed_a2ia' /bin/sh ../libtool --silent --mode=link --tag=CXX g++ -Wnon-virtual-dtor -Wno-long-long -Wundef -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -ansi -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -Wcast-align -Wconversion -fno-builtin -g -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -o lheed_a2ia lheed_a2ia.o /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: the use of `tmpnam' is dangerous, better use `mkstemp' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `cerr' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__pure_virtual' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__cp_push_exception' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `char type_info node' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__ctype_b' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `endl(ostream &)' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `char type_info function' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__uncatch_exception' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__out_of_range(char const *)' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__rtti_user' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `int type_info function' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__rtti_si' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__check_eh_spec' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__throw' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `ostream::operator<<(char const *)' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `terminate(void)' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__throw_type_match_rtti' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__cp_pop_exception' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__rtti_ptr' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__length_error(char const *)' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__cp_eh_info' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__rtti_class' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__eh_alloc' collect2: ld returned 1 exit status gmake[2]: *** [lheed_a2ia] Error 1 gmake[2]: Leaving directory `/home/lenja/lheed_a2ia/lheed_a2ia' gmake[1]: *** [all-recursive] Error 1 gmake[1]: Leaving directory `/home/lenja/lheed_a2ia' gmake: *** [all] Error 2 *** failed *** ============================================

Пробовал компилировать из командной строки gcc, но результат практически тот же, хотя сообщений только 6.

Что делать, как указать компилятору то, чего не хватает?

Заранее спасибо.


Чтобы прилинковать эту либу придется ставить компилятор из серии 2.x

В RedHat 9 идет уже gcc 3.2.x, а форматы библиотек у серии 2.x и 3.x не совместимы.

Dead ★★★★
()
Ответ на: комментарий от Dead

Спасибо за совет.

Я скачал ту же самую версию компилятора, на которой компилировалась используемая библиотека. Количество ошибок линковки уменьшилось, но шесть ошибок линковки из вышеприведенного списка все же остались :(. К сожалению, исходников библиотеки нет. Пытался дополнительно линковать libc++, но успеха не имел, только сильную ругань :).

Правильно ли эту динамическую библиотеку линковать как статическую? Не связаны ли с этим проблемы?

Я поискал в хелпе KDE, как использовать динамическую линковку, но не нашел. Для виндов я это делаю без проблем через LoadLibrary(). Есть какой-нибудь аналог этого в C для Linux'а?

lenja
() автор топика
Ответ на: комментарий от Dead

Вот эти сообщения:

/home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `cerr' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__pure_virtual' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__ctype_b' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `__throw' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `ostream::operator<<(char const *)' /home/lenja/checkreader/adsdb_8_2/lib/redhat61/libAdsDBApi.so: undefined reference to `terminate(void)'

В тестовой программе включены хедеры: ------------------------ #include <stdio.h> #include <string.h> #include "adsdbapi.h" // Хедер для подключаемой библиотеки. В самом хедере "adsdbapi.h" больше никаких подключений нет. ------------------------

Может каких-нибудь еще хедеров не хватает?

Спасибо за желание помочь!

lenja
() автор топика
Ответ на: комментарий от lenja

Еще мнения будут или сразу в морг? :)

lenja
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.