我之前编译时链接的 oracle 11g 的 libaidb_ora.so ,没有这个问题,发送给客户,客户说他们用的是 oracle 10g 的,所以我把 libaidb_ora.so 换成了客户现场的 oracle 10g 的版本,重新编译 psagent_single 报错
编译命令如下:
CC -g -DSunOS -o psagent_single ps_main.o ps_global.o ABSDatabase.o ps_config_attr.o ps_shlib.o ps_action.o ps_config.o ps_prov_record.o ps_provision.o datetime.o ps_daemon.o ps_pid_file.o ps_queue.o -L/tank/data/build/test1/obs61_vb3.3/center/lib -L/aitools/lib -L/tank/data/build/test1/obs61_vb3.3/platform/lib -L/tank/data/build/test1/obs61_vb3.3/sdk/lib -lldap -llber -laidb_ora -ltcl8.2 -laiplatform -ldes -ldesm -lclogfile -ldl
报错信息:
Undefined first referenced
symbol in file
cout /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
unsafe_ostream::operator<<(long) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
operator delete(void*) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
operator new(unsigned int) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
Iostream_init::Iostream_init(void) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
Iostream_init::~Iostream_init(void) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
aiCfg::getHandler(void) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
endl(ostream&) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
unsafe_ostream::outstr(const char*, const char*) /tank/data/build/test1/obs61_vb3.3/platform/lib/libaidb_ora.so
ld: fatal: Symbol referencing errors. No output written to psagent_single
make: *** [psagent_single] Error 1
1
nyanyh 2017-12-20 11:27:32 +08:00 1
找不到符号? 10g 11g 是不是有 API 差异
|
2
gnaggnoyil 2017-12-20 11:36:09 +08:00 via Android 1
@nyanyh api 差异就直接编译报错了.编译没问题链接器提示未定义符号的话明显编译器版本不同导致的 abi 差异,而且版本差的还挺远
看详细错误目测直接原因是 libaidb_ora.so 和 lz 机子上的 cpp runtime 的 abi 没对上号.lz 要不先比对一下编译器版本? |
3
jimy1 OP 谢谢 2 位回复,我都再看看
|
4
hackpro 2017-12-21 14:25:23 +08:00 1
nm 看一下未定义的符号
两个版本上都比对一下 |