如何组合共享库?
回答
这里假设你的源代码给所有共享对象:
只要没有名字空间的冲突,它不会(其中如果两个并存,因为它是不应该有)将它们构建到一个共享对象中非常困难。
如果共享库本身依赖于来自其他库的代码,那么订单就会很重要。真正的工作就是获得makefile中的依赖关系。我从来没有在SO的成功链接中看到循环依赖关系,所以我怀疑你有他们开始。即foo()依赖于依赖于foo()的bar()。
我已经做了几次,虽然库本身是微不足道的。我从ustr(字符串处理程序),配置文件处理程序,一些其他自定义分析程序和其他实用程序函数中提取了一些部分,并创建了自定义混搭。
真正的痛苦带来了上游的改进,每一次你将它们合并在一起,但我不确定这对你是否有问题。
所以,如果您有:
libfoo.so: $(LIB_FOO_OBJECTS) $(LIB_BAR_OBJECTS) $(LIBFOOBAR_OBJECTS)
其中:
LIB_FOO_OBJECTS = \
$(libfoo)/foo.o \
$(libfoo)/strings.o
LIB_BAR_OBJECTS = \
$(libbar)/bar.o
....
...和顺序是正确的..休息是很容易的。请注意,我没有显示标题摘要,每个人都有不同的表现。虽然它们在进行混搭时很重要,因为您可能希望避免每次更改一个标头时重新编译整个库。
注意:如果所有这三个项目都使用自动工具..您的任务取决于指数更容易(或更难)。
如果你没有源代码
如果每个库的静态版本,您可以提取对象,并使用它们。 I .: .:
$ cp /usr/lib/foo.a ./foo.a
$ ar x foo.a
$ gcc -fPIC -shared *.o -o foo.so
当然它比相关说明更多地涉及。
我从来没有尝试过,不知道如何处理那些有主要()的SO,当涉及到在这种情况下的链接。
他想要的是“libstuff.so:libfoo.so libbar.so”,它不是?我认为问题是他没有目标文件。 – 2009-11-19 11:39:57
@Jamie Soriano:最好的做法(在所有帐户中)是编译将单个共享对象变成一个大的共享对象的对象。如果你只是依靠其余的一个大型SO,那么你就没有做任何事情来解决依赖性问题,而这个问题首先让你做到了。 – 2009-11-19 12:53:11
@Jaime Soriano:这就是我真正想要的。但我甚至不确定这是可能的。 – 2009-11-19 13:06:48
- 1. 如何将共享库与其他共享库链接到Linux?
- 2. 混合静态库和共享库
- 3. 混合共享库和静态库
- 4. 共享库结合才库不处理
- 5. 如何共享公共库中Jboss7
- 6. 将共享库链接到共享库
- 7. opencv V3混合共享和非共享
- 8. 合并多个.so共享库
- 9. 合并两个共享(.so)库
- 10. 混合静态和动态(共享)库?
- 11. 如何在共享对象库中共享变量
- 12. 如何在PlasticSCM中使用共享配置库共享ignore.conf?
- 13. 共享库App.Config
- 14. Websphere共享库
- 15. 共享库
- 16. TFS共享库
- 17. 共享库
- 18. 共享库websphere
- 19. Linux共享库
- 20. 共享库 - .so
- 21. cmake共享库
- 22. 共享组件
- 23. 在wordpress网站git上合作。如何共享数据库?
- 24. linux共享c库不共享
- 25. 共享库文本段不可共享
- 26. 不与共享库共享所有类
- 27. 与共享集合
- 28. 如何查找共享相同组合索引的行?
- 29. Swagger:如何组合来自不同API的共享信息
- 30. 如何共享
这似乎是相关的:http://stackoverflow.com/questions/386579/pack-shared-libraries-into-the-elf – Inshallah 2009-11-19 11:40:07
@Inshallah:Windows - 我必须支持 - 不支持ELF。 – 2009-11-19 13:23:52