我有一个动态库 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.so 并重命名它作为 libtest.so。但现在“ld”报告 libgcc_s.so 不可用。我找到了一个使用 -static-libgcc 标志静态链接 libgcc_s.so 的选项。但是,这似乎不起作用。还有什么我可以尝试的吗?
对于手头的问题,这似乎是一种矫枉过正。但是我们在许多生产系统中都面临这个问题。由于这些库是我们的,将它们复制到 Oracle/lib 或任何系统 lib 目录或更改系统级别的任何属性都不会被接受。最好的解决方案是拥有一个完全包含的库来满足 ld 的饥饿感。