我正在创建一个共享库(.so),其中包含我的代码,以及一些第三方的.so。具体来说,第三方.so的一个是libaide.so。链接后,当我执行nm -DC mylib.so
时,我看到libaide.so中的所有符号都是未定义的(nm输出中的“U”)。现在,我可以在创建最终可执行文件时解决这些问题,方法是在最终编译/链接时使用libaide.so进行链接,但我希望将www.example.com给予mylib.so给其他人,而不要求他们在最终链接步骤中添加-laide
。这可能吗我该怎么做?
1条答案
按热度按时间zdwk9cvp1#
AFAIK有两种方法。
第一种是对所有中间步骤使用
-Wl,-unresolved-symbols=ignore-in-shared-libs
,这会忽略共享库中的未解析符号。第二个是为中间步骤生成一个存根共享库,它与
mylib.so
具有相同的api,但是所有的实现都是假的,这样存根就不依赖于libaide.so
。而且在运行时,你应该使用真实的mylib.so
。这两种方式在运行时都需要
libaide.so
存在。