Есть 2 шарэд либы с динамической линковкой(esssdu и essutlu). Сначала essutlu была зависима от esssdu. Позже, в esssdu пришлось добавить некий код, который юзает essutlu — имеем circular dependencies . Как эти либы правильно сбилдить? Читая мэйкфайлы для этих либ, вижу такой код
Makefile1
Код | ...... # essglobu.dll ess_glob_files = globutil
$t/misc/$(ess_lib_pre)essglobu$(ess_dll): $(addprefix $t/misc/, \ $(addsuffix $o,$(ess_glob_files))) \ $t/sd/$(ess_lib_pre)esssdu$(ess_lib) \ $(ess_globalc_libs) \ $(ess_mkdll) ......
$t/misc/$(ess_lib_pre)essutlu$(ess_dll): $(addprefix $t/misc/, \ $(addsuffix $o,$(ess_utl_files)) \ $(addsuffix l$o,$(ess_utl_l_files))) \ $t/shr/shrdiag$o \ $t/sd/$(ess_lib_pre)esssdu$(ess_lib) \ $t/misc/$(ess_lib_pre)essglobu$(ess_lib) \ $(ess_globalc_libs) \ $(ess_mkdll) .......
|
Makefile2
Код | ......... $t/sd/$(ess_lib_pre)esssdu$(ess_dll): $(addprefix $t/sd/, \ $(addsuffix $o,$(ess_sd_files))) \ $t/misc/$(ess_lib_pre)essutlu$(ess_lib) \ $(ess_mkdll) .........
|
Потом это все включается в главный мэйкфайл. Раньше сначала билдилась esssdu, а потом esssutlu, ссылаясь на esssdu. А вот как быть теперь? когда по идее для билда каждой из либ необходимо наличие другой либы. Кора вот в чем — СС компайлер с этим СПРАВЛЯЕТСЯ КАК-ТО, (это аутпут билда)
Код | .... CC -G -mt /misc/globutil.o /misc/sgtfrst.o /misc/version.o -L../../globalc/solaris/ -lglobalc -o /misc/libessglobu.so CC -G -mt /misc/syssmem.o /misc/systime.o /misc/sysos.o /misc/sgtcfg.o /misc/sysdiag.o /misc/sysmod.o /misc/sysxcpt.o /misc/sysmain.o /misc/sgtthd.o /misc/sysfilel.o /misc/sysseml.o /misc/syserrl.o /shr/shrdiag.o /misc/sgtfrst.o /misc/version.o -L../../common_source/globalc/solaris/ -Ltarget/misc/ -lessglobu -lglobalc -o /misc/libessutlu.so CC -G -mt /sd/sdcommon.o /sd/memheap.o /sd/memsys.o /sd/sdctxsol.o /sd/sdmemsol.o /sd/sdthdsol.o /sd/sdsemsol.o /sd/sdipcsol.o /sd/sdfiosol.o /sd/sdclksol.o /sd/sdtiosol.o /sd/sdmodsol.o /sd/sdosrsol.o /sd/sdressol.o /sd/sddiosol.o /sd/sysunix.o /misc/sgtfrst.o /misc/version.o -Ltarget/misc/ -lessutlu -o /sd/libesssdu.so ....
|
, а xlC — нет, выдает Undefined symbol'ы в globutil.o
Код |
.... xlC_r -G -brtl -b32 -bmaxdata:0x80000000 -bernotok -qxref=full /misc/globutil.o /misc/sgtfrst.o /misc/version.o -L../../common_source/globalc/aix/3/ -lglobalc -bstatic -lptools_ptr -bdynamic -Llib/aix -o /misc/libessglobu.so ....
|
Как быть?
|