我有一个动态库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的饥饿感。
答案 0 :(得分:0)
我还没有找到一种方法来做到这一点。但是,通过执行'srvctl setenv listener -T“LD_LIBRARY_PATH = / my / path /”'来解决问题。由于尚未回复上述问题(静态链接),我正在结束这个问题。
答案 1 :(得分:0)
没有。 *.so
文件是只能动态链接的共享库。您需要原始源或*.o
文件来构建静态库作为.a
文件,以便能够静态链接它们。