【发布时间】:2013-08-30 12:14:21
【问题描述】:
我有一个动态库 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 或任何系统库目录或更改系统级别的任何属性都不会被接受。最好的解决方案是拥有一个完全包含的库来满足 ld 的饥饿感。
【问题讨论】:
标签: gcc oracle11g solaris ld static-linking