2017-07-19 16 views
0

我想要做的是創建一個動態庫(lib_utils.so),它靜態鏈接libstdC++幷包含其他實用程序函數(由我創建)。 然後,我希望其他二進制文件使用此庫而不是libstdC++。將libstdC++和其他函數合併到一個庫中

看起來很愚蠢,但我不能將lib_utils.so和libstdC++。so.6同時部署到我的客戶,我嘗試將它們組合到一個單一的庫中。我也想避免與libstdC++靜態鏈接,因爲我有5個需要libstdC++的二進制文件。

這可能嗎?

謝謝

+1

爲什麼不按照將* *工具包裝到庫中的明顯方法,讓用戶鏈接到你的工具和標準庫?沒有理由爲什麼你需要用libstdC++來包裝它。請注意,默認情況下,標準庫不是靜態鏈接的 – Justin

+0

用戶不使用我的庫,只使用這些庫。問題是用戶在他的設備上沒有libstdC++,我必須以某種方式提供它(所以我的項目工作),但我對部署的文件數量有限制,這就是爲什麼我要部署lib_utils的原因。 so和libstdC++。這樣在單個庫中。 – Taw

+0

當然我知道明顯的方法,但我想以某種方式欺騙它(因爲限制),這就是爲什麼我問這個問題。:-)。我的問題是如果它可以完成或不完成。 – Taw

回答

0

我設法做到這一點:

g++ -std=c++14 -Wl,-whole-archive /usr/lib/gcc/x86_64-linux-gnu/5/libstdc++.a -Wl,-no-whole-archive -shared -fPIC lib.cpp -o libviata.so 

然後我裝這個庫到一個簡單的應用程序,這個應用程序不需要的libstdC++了,因爲它加載我的自定義庫(這是現在挺大的,2.1MB)

g++ -std=c++14 test.cpp -o test -L/home/tawfic/Desktop/test -lviata && ldd test 
相關問題