我正在创建一个共享库 (.so),其中包含我的代码以及一些第三方 .so。具体来说,第三方.so之一是libaide.so。
链接后,当我执行
nm -DC mylib.so
时,我看到 libaide.so
中的所有符号均未定义(nm 输出中的“U”)。现在,我可以在创建最终可执行文件时通过在最终编译/链接时与 libaide.so
链接来解决它们,但我想将 mylib.so
提供给其他人,而不要求他们将 -laide
添加到最终版本中链接步骤。
这可能吗?我该怎么做?
据我所知有两种方法。
第一个是对所有中间步骤使用
-Wl,-unresolved-symbols=ignore-in-shared-libs
,这会忽略共享库中未解析的符号。
第二个是为中间步骤生成一个存根共享库,它与您的
mylib.so
具有相同的api,但所有实现都是假的,因此存根不依赖于libaide.so
。而且跑步的时候,应该用真正的mylib.so
。
两种方式都需要在跑步时出现
libaide.so
。