【问题标题】:linked option with g++与 g++ 的链接选项
【发布时间】:2015-06-22 14:22:52
【问题描述】:

我有一个共享库需要加载到我的 java 应用程序中。

我的共享库“libabc.so”代码使用 API 的 另一个共享库“libxyz.so”

虽然我通过头文件向我的库提供这些 API 的声明,

当我用

构建我的共享库“libabc.so”时

g++ -shared -Wall -pthread -lrt

java 应用程序无法加载库。 而如果我用 g++ -shared -Wall -pthread -lrt -lxyz ,加载成功。

在这两个选项中,生成的库都没有报告任何错误。 但是对于第二个选项,无论我在哪里构建我的库,我都应该在环境中使用 libxyz.so。 有什么选择吗?我在这里错过了什么吗?

【问题讨论】:

  • 所以我打算在这里构建 libabc.so,它可以在我的 java 应用程序中加载,而无需 g++ 的 -lxyz 选项。如果可能的话。

标签: c++ c g++ shared-libraries


【解决方案1】:

恐怕这是不可能的。如果您正在构建依赖于另一个共享库库的共享库,则必须显式声明此依赖关系。否则动态链接器/加载器不可能解决所有依赖关系。

如果您想摆脱依赖并且可以访问 libxyz.so 的源代码(或者 libxyz.so 也可用作 libxyz.a - 一个静态库),您可以尝试将它们捆绑到 libabc .so.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 2012-01-27
    • 2018-04-13
    • 2011-04-18
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多