Я испытываю некоторые проблемы с линковкой на Solaris 11.3 с помощью Developer Studio 12.5.
Кажется, что код компилируется нормально, но на этапе соединения происходит сбой:
CC -o bin/libBlah.so -mt -G -z defs -fast -s -KPIC -xarch=generic \
-M mapfiles/solaris.map -library=stlport4 -staticlib=stlport4 \
<my .o files> <some boost .a libs> <openssl .a libs> \
-lCrun -lsocket -lnsl -lposix4 -lc -lm -lw -ldl
Undefined first referenced
symbol in file
void __Crun::ex_end_init() obj/Blah.o
void __Crun::ex_start_init() obj/Blah.o
ld: fatal: symbol referencing errors
gmake: *** [bin/libBlah.so] Error 2
Если я удалю ‘-z defs’ из командной строки (параметры ссылки), он будет нормально связываться. Запуск ldd libBlah.so не показывает пропущенных ссылок.
Коллега использовал «nm», чтобы найти символы, которые были найдены только в статических библиотеках libCrun (не в общих библиотеках):
# nm /opt/developerstudio12.5/lib/compilers/libCrun.so | grep ex_end_init
# nm /opt/developerstudio12.5/lib/compilers/libCrun.a | grep ex_end_init
00000340 T __1cG__CrunLex_end_init6F_v_
В руководстве рекомендуется использовать ‘-zdefs’, чтобы указать на пропущенные символы, что мы уже делали ранее (у makefile уже был этот флаг), поэтому я затрудняюсь объяснить, что я вижу.
Вопрос просто: что мне с этим делать и что с этим делать?
Задача ещё не решена.
Других решений пока нет …