创建共享库时强制解析符号

问题描述 投票:0回答:1

我正在创建一个共享库 (.so),其中包含我的代码以及一些第三方 .so。具体来说,第三方 .so 之一是 libaide.so。链接后,当我执行

nm -DC mylib.so
时,我看到 libaide.so 中的所有符号都未解析(nm 输出中的“U”)。现在,我可以在创建最终可执行文件时通过在最终编译/链接时链接 libaide.so 来解决它们,但我想将 mylib.so 提供给其他人,而不要求他们将
-laide
添加到最终版本中链接步骤。这可能吗?我该怎么做?

c++ linux linker shared-libraries
1个回答
0
投票

据我所知有两种方法。

第一个是对所有中间步骤使用

-Wl,-unresolved-symbols=ignore-in-shared-libs
,这会忽略共享库中未解析的符号。

第二个是为中间步骤生成一个存根共享库,它与您的

mylib.so
具有相同的api,但所有实现都是假的,因此存根不依赖于
libaide.so
。跑步时,你应该使用真正的
mylib.so
(当然还有
libaide.so
)。

© www.soinside.com 2019 - 2024. All rights reserved.