Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Circular dependencies.Битва компиляторов-CC vs xlC


Автор: DPbIH 4.6.2009, 18:14
Есть 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
....

 

Как быть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)