与 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.
我有一个共享库需要加载到我的 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.