【问题标题】:statically linking libgcc_s.so to libcrypto.so in solaris在 solaris 中将 libgcc_s.so 静态链接到 libcrypto.so
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 嗯,要求不是构建静态库。我有 lib1.so 取决于 lib2.so (这里是 libgcc_s.so )。我想知道是否可以创建一个完全包含的 lib1.so,它内部将具有来自 lib2.so 的目标代码。我在网上找到了参考资料,但无法做到。
      猜你喜欢
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多