leopoldfreeman 发表于 2012-09-23 21:05

运行时(Runtime)函数调用问题

本帖最后由 leopoldfreeman 于 2012-09-23 21:07 编辑

最近做一个项目需要调用到openssl (libcrypto.a)及oracle这两个库。

编译通过,但运行时收到SIGSEGV,gdb bt 后如下:

(gdb) bt
#00x0811448d in BN_set_word ()
#10x00da8d05 in BN_mod_inverse () from /data/oracle/lib/libnnz10.so
#20x08101c9e in BN_MONT_CTX_set ()
#30x08101ffe in BN_MONT_CTX_set_locked ()
#40x080eddda in dsa_sign_setup ()
#50x080edad4 in dsa_do_sign ()
#60x080ed282 in DSA_sign ()

很明显,libcrypto.a中的BN_MONT_CTX_set ()调用了oracle库libnnz10.so中的BN_mod_inverse ()导致了问题。解决也不难,小改下openssl的代码就可以了(rename)。

我想问的是,有没有其他方法可以解决这个问题(让libcrypto.a优先调用自身的函数,而不是另外一个库中的函数),谢谢。

leopoldfreeman 发表于 2012-09-23 21:05

以前有个账号的,好久不登陆,密码忘了,邮箱忘了。。。

linux_c_py_php 发表于 2012-09-24 11:30

让libcrypto.a优先调用自身的函数,而不是另外一个库中的函数

咋调到oracle去了... 好神奇!

leopoldfreeman 发表于 2012-09-24 19:41

调整链接顺序就解决了。

这样是OK的:
-lcrypto -lnnz10


这样是有问题的:
-lnnz10 -lcrypto

linux_c_py_php 发表于 2012-09-24 20:23

原来同时链入两个库, 恩.
页: [1]
查看完整版本: 运行时(Runtime)函数调用问题