0

我有一个动态库 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 的饥饿感。

4

2 回答 2

0

我还没有找到执行上述操作的方法。但是,通过执行 'srvctl setenv listener -T "LD_LIBRARY_PATH=/my/path/"' 解决了这个问题。由于尚未解决上述问题(静态链接),我将关闭此问题。

于 2013-09-02T07:57:18.160 回答
0

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

于 2013-09-03T00:49:48.470 回答