我的项目链接到静态库libA.a版本1.
此可执行文件还链接到另一个静态库B. B链接到A,但版本2。
A版本1和2中的两个符号集都相同。 如果我知道在我的项目和B之间没有任何与A有任何关系的共享,那么这应该有用吗?
我设法手动链接它似乎工作(可能有我不知道的陷阱)。
我不能将lib B作为共享对象,或者使用A作为共享对象。实际上,我只知道B正静静地使用A,因为我和那个写B的人谈过。
答案 0 :(得分:3)
我有待纠正,但似乎你可以通过仔细的编译过程和明智地使用objcopy来完成你的愿望。您应遵循的步骤是:
答案 1 :(得分:2)
关于问题的“链接”部分,实际上静态库没有链接在一起。仅执行链接步骤以获取最终可执行文件。
事实上,您使用A(版本2)的标头编译您的静态库B.然后,您将可执行文件与B和A(版本1)库链接。
只要两个版本的A中的符号相同,就没有编译问题。但你必须知道你的可执行文件实际上只嵌入了&使用A的版本1。