将libgcc_s.so静态链接到solaris中的libcrypto.so

时间:2013-08-30 12:14:22

标签: gcc oracle11g solaris ld static-linking

我有一个动态库libtest.so,它依赖于libcrypto.so(openssl),所有这些依赖于libgcc_s.so。

Platform : Solaris sparc 5.10
Compiler : gcc 4.5.1
OpenSSL  : 1.0.1e version

此libtest.so是我的数据库(Oracle 11g)中的外部过程(extproc)的目标库。我已将所有这些库复制到一个文件夹中,并且在listener.ora中的LD_LIBRARY_PATH(和LD_LIBRARY_PATH_64)以及oracle用户的.profile中也提到了相同的内容。路径和库具有完全公共访问权限。仍然oracle(ld)报告它无法找到libcrypto.so说“没有这样的文件或目录”。

由于我们可以在多大程度上对生产设置进行试验(并且每次都让DBA重新启动监听器),因此我将代码(libtest.so的代码文件)移动到openssl并创建了一个组合的libcrypto。所以并将其重命名为libtest.so。但现在“ld”报告说libgcc_s.so不可用。我找到了一个使用-static-libgcc标志静态链接libgcc_s.so的选项。然而,这似乎不起作用。还有什么我可以尝试的吗?

对于手头的问题,这似乎有些过分。但我们在许多生产系统中都面临着这个问题。由于库是我们的,因此将它们复制到Oracle / lib或任何系统lib目录或更改系统级别的任何属性将不受理。最好的解决方案是拥有一个完全包含的库,它将满足ld的饥饿感。

2 个答案:

答案 0 :(得分:0)

我还没有找到一种方法来做到这一点。但是,通过执行'srvctl setenv listener -T“LD_LIBRARY_PATH = / my / path /”'来解决问题。由于尚未回复上述问题(静态链接),我正在结束这个问题。

答案 1 :(得分:0)

没有。 *.so文件是只能动态链接的共享库。您需要原始源或*.o文件来构建静态库作为.a文件,以便能够静态链接它们。