Russian Qt Forum

Компиляторы и платформы => Компиляторы => Тема начата: lenja от Апрель 12, 2004, 11:05



Название: Ошибки линковки gcc
Отправлено: lenja от Апрель 12, 2004, 11:05
Сразу говорю, что в программировании под 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.

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


Название: Ошибки линковки gcc
Отправлено: npak от Апрель 12, 2004, 13:58
Скорее всего, тебе потребуется старый компилятор или пересобрать библиотеку новым компилятором.

В g++ серии 3.x.x изменили схему представления имён C++ (name mangling) в объектных файлах, поэтому старые библиотеки теперь не линкуются с новыми объектниками.