与 g++ 的链接选项

linked option with g++

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

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

尽管我通过头文件向我的库提供了那些 API 的声明,

当我用

构建我的共享库时 "libabc.so"

g++ -shared -Wall -pthread -lrt

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

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

恐怕这是不可能的。如果您正在构建依赖于另一个共享库库的共享库,则必须明确声明这种依赖性。否则动态linker/loader无法解析所有依赖。

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