之前在HP上做了一个项目遇到这样一个编译问题:ld: Mismatched ABI (not an ELF file) for -lCsup_v2, found /usr/lib/libCsup_v2.sl Fatal error.
猜的可能是32位64位编译的问题。首先查看了库文件/usr/lib/libCsup_v2.sl是32位还是64位的:
file libCsup_v2.sl
libCsup_v2.sl: PA-RISC1.1 shared library -not stripped
可以看出在/usr/lib/里的是32位的,在/usr/lib/hpux64才是64位的,要设置这个环境变量
setenv SHLIB_PATH /usr/lib/hpux64:/usr/lib:$ORACLE_HOME/lib:$ARBORDIR/3pACE/ACE_wrappers/bin:${ARBORDIR}/3p/rosette/SOLARIS/rel/lib:$ARBORDIR/3ppythoni/SOLARIS/lib:$ARBORDIR/site_specific/lib:/usr/openwin/lib:/usr/dt/lib:/usr/ucblib:$SHLIB_PATH
同时makefile.HPUX里是根据
# itanium vs pa-risc, introduced env var HP_ARCH
123 # if set to ITANIUM, then link Csup
124 # if set to PA, then link Csup2
125 # if not set, default to PA
126 CCC_LIBS_ITANIUM = -lstd_v2 -lCsup
127 CCC_LIBS_PA = -lstd_v2 -lCsup_v2
128 CCC_LIBS_ = -lstd_v2 -lCsup_v2
129 CCC_LIBS = $(CCC_LIBS_$(HP_ARCH))
因此要设置环境变量
setenv HP_ARCH ITANIUM 使用Csup而不是Csup_v2
这样设置后程序就顺利编译通过,解决了这个问题当时很高兴,哈哈,后来发现好多人都遇到过这个问题