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

tjvv9vkg  于 2023-10-16  发布在  Linux
关注(0)|答案(1)|浏览(137)

我正在创建一个共享库(.so),其中包含我的代码,以及一些第三方的.so。具体来说,第三方.so的一个是libaide.so。链接后,当我执行nm -DC mylib.so时,我看到libaide.so中的所有符号都是未定义的(nm输出中的“U”)。现在,我可以在创建最终可执行文件时解决这些问题,方法是在最终编译/链接时使用libaide.so进行链接,但我希望将www.example.com给予mylib.so给其他人,而不要求他们在最终链接步骤中添加-laide。这可能吗我该怎么做?

zdwk9cvp

zdwk9cvp1#

AFAIK有两种方法。
第一种是对所有中间步骤使用-Wl,-unresolved-symbols=ignore-in-shared-libs,这会忽略共享库中的未解析符号。
第二个是为中间步骤生成一个存根共享库,它与mylib.so具有相同的api,但是所有的实现都是假的,这样存根就不依赖于libaide.so。而且在运行时,你应该使用真实的mylib.so
这两种方式在运行时都需要libaide.so存在。

相关问题