- 論壇徽章:
- 1
|
最近在一家銀行作核心系統(tǒng),采用的是SCO openServer6.0.0,原來的程序是在SCO openserver5.0.6小編譯的,而且是大量的動態(tài)鏈接庫.so,遇到的問題真是惡心之極,網(wǎng)上國內(nèi)外查了個遍,遇到的問題還是不少,但是基本上都沒有說到點(diǎn)子上,下面是我遇到的問題及解決方法,希望更多的人參與:
SCO OSR5下的動態(tài)庫libfun.so,exe.c可執(zhí)行程序,libfun.so是在SCO5下編譯的,直接拷貝到
SCO OSR6下,重新使exe.c鏈接libfun.so,出現(xiàn)的情況如下:
SCO openserver6.0 編譯鏈接
mk.sh:
cc -c -Kudk q.c -I/usr/tuxedo/include -I/usr/include #生成.o
cc -o a.out -Kosr q.o \
-dy -L./ -Kosr -lfun \
-L/usr/tuxedo/lib -lwsc -lbuft -lwsc -lnws -lnwi -lnws -lfml \
-lfml32 -lgp /usr/lib/libcrypt.a -belf -lnsl -lsocket -L/usr/lib
# sh mk.sh
1.UX:cc: WARNING: -L /usr/lib will likely find the wrong libraries for your
compilation mode
2.UX:ld: ERROR: libfun.so: cannot link OpenServer object into Intel iABI (UDK
ABI)
target
To build using existing OpenServer objects, compile and link using
-Kosr option
Or to convert to UDK ABI, recompile OpenServer sources with (default)
-Kudk option
這里涉及到SCO6用的編譯器,他缺省用的是/usr/ccs/bin/cc,即UNware的編譯器,
這樣鏈接不了SCO5的動態(tài)庫(格式不支持,UDK):ilbfun.so,因此,需要用SCO6支持SCO5動態(tài)庫的
編譯器:/osr5/usr/ccs/bin/cc ,并且加兩個參數(shù):-Kosr -f osr,終于編譯過了
/osr5/usr/ccs/bin/cc -DSVR4 -c q.c \
-I/usr/tuxedo/include -I/usr/include -I/osr5/usr/include
/osr5/usr/ccs/bin/cc -o a.out q.o \
-belf -f osr -L./ -lfun -f osr \
/usr/lib/libcrypt.a -belf -lnsl \
-L/osr5/usr/lib \
-L/usr/lib -lgen -lm -lc
#-L/usr/tuxedo/lib -ltux -lbuft -ltux2 -lwsc -lnws -lnwi -lfml -lfml32 -lgp -belf
這樣就可以了,但是增加了TUXEDO的函數(shù),例如userlog,把下面的鏈接函數(shù)庫放開,
就發(fā)生了很多找不到的函數(shù),:例如
__stat32 undefineed symbol in libgp.a (libgp.so.60)
但是,根據(jù)本人的經(jīng)驗,涉及的問題就比較多了,之前這個在SCO5下都是通過的,
希望有高人能夠解決。。。!
總結(jié):如果是SCO5.0.6的用戶,程序移植到SCO6上,個人建議不要重新編譯(因為如果用到TUXEDO,
informix,他們的庫可能通過不了,他們都是在SCO5下作的,當(dāng)然要是有源代碼的話),
重新編譯恐怕會有不可預(yù)知的問題,總之SCO6不象想象的那么牛B!
本文來自ChinaUnix博客,如果查看原文請點(diǎn):http://blog.chinaunix.net/u/31/showart_502648.html |
|