我正在创建一个共享库 (.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
)。