如何組合共享庫?
回答
這裏假設你的源代碼給所有共享對象:
只要沒有名字空間的衝突,它不會(其中如果兩個並存,因爲它是不應該有)將它們構建到一個共享對象中非常困難。
如果共享庫本身依賴於來自其他庫的代碼,那麼訂單就會很重要。真正的工作就是獲得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