我有一个二进制 1,它是链接到另一个 library1.so 的编译时。为了添加一些功能,我创建了 library2.so,它使用 libas_sdk.so。
library2.so 中的功能仅在 dlopen(libas_sdk.so) 成功时才有效,否则它会正常返回并执行其他工作。
现在 library1.so 必须在需要时使用 library2.so 并使用新功能。
我尝试了多个编译和链接选项,但得到 ldd 或未解决的符号错误。
请建议。
dlopen() 将返回成功,如果 lib 已经链接进来。
因为 library1.so 必须使用 library2.so,所以您需要将它们都链接到 binary1。(-llibrary1 -llibrary2)
从您的问题看来,libas_sdk.so 运行时中的 library2.so 链接。当你调用它的一些 init_library2() 或一些带有一些配置数据的函数时,它可能会发生。
我认为问题不在于您的链接,而在于您的 binary1。library2(或 library1)的这种初始化是你做得太早或太晚的事情。恕我直言,您的 binary1 应该与一个简单的 -llibrary1 -llibrary2 链接。