Linker не находит имплементацию функции
От: the_moon  
Дата: 06.05.11 08:51
Оценка:
Привет,

hp-ux, aCC компайлер и RogueWave библиотека. Но вопрос я думаю как бы общий.

Я скомпилировал RogueWave и в частности был собран архив libtls12s.a с имплементацией RWClockTimer::start() из timer.o объектника
# nm libtls12s.a | c++filt | grep RWClockTimer::start
[59]     |                     0|     512|FUNC |GLOB |0|   .text|RWClockTimer::start()


При линковке библиотека libtls12s.a тоже указана как -ltls12s, в логе линковшика видно, что он из этой библиотеки берет некоторые функции, правда из других объектников.
Selecting /users/altos/workspace/rw11.1//lib/libtls12s.a[arefcount.o] to resolve RWAtomicReferenceCount::RWAtomicReferenceCount(long)(complete)
Loading /users/altos/workspace/rw11.1//lib/libtls12s.a[arefcount.o]:
COMDAT group "{rw_tls_library_id()} string literal" discarded from file /users/altos/workspace/rw11.1//lib/libtls12s.a[arefcount.o]
COMDAT group "guard of {__rw::__rw_mutex_base& __rw::__rw_get_static_mutex<unsigned long>((%0=)unsigned long*)} __mutex" discarded from file /users/altos/workspace/rw
11.1//lib/libtls12s.a[arefcount.o]
/users/altos/workspace/rw11.1//lib/libtls12s.a[arefcount.o]:
    rw_atomic_add_acq is UNDEF GLOBAL FUNC


То есть все как бы имеется, но в итоге ликовшик выдает
ld: Unsatisfied symbol "RWClockTimer::start()" in file /users/altos/workspace/rw11.1//lib/libsync12s.a[RWCondition.o]



почему то не подгружает он имплементации из библиотеки, для другой библиотеки.

Если в параметрах помимо архива подсунуть линковшику объектник с RWClockTimer имплементацией то линковшик сразу все находит.

Это какой то баг в линковшике? Или какая то проблема в параметрах к линковшику. Может библиотеки должны в правльном порядке указанны, yahoo его знает.

Никто с таким не сталкивался?

Спасибо
KOPOTbILLIKA KPbIC
Re: Linker не находит имплементацию функции
От: the_moon  
Дата: 06.05.11 09:00
Оценка: 1 (1)
Здравствуйте, the_moon, Вы писали:

Точно, там же написанно в мануле

ld processes files in the same order as they appear on the command
line. It includes code and data from an archive library element if
and only if that object module provides a definition for a currently
unresolved reference within the user's program (see +[no]forceload).
It is common practice to list libraries following the names of all
simple object files on the command line.


Поменял порядок библиотек и оно заликовалось.
KOPOTbILLIKA KPbIC
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.