![](/img/trans.png)
[英]dlopen a dynamic library from a static library, when the dynamic library uses symbols of the static one
[英]How to make a static/dynamic library that uses a library
我正在制作C ++庫。 在該庫中,我正在另一個靜態庫中使用某些函數(例如ref.a)。
我想生成一個庫文件,即mylib.a或mylib.so,這樣使用我的庫的任何程序都無需鏈接到靜態庫(ref.a)。 我從其他人那里得到了一些有關如何將靜態庫鏈接到動態庫的想法,例如“ --whole-archive”,但不清楚如何實現。
要獲取mylib.a,我只需ar -rc mylib.a mylib.o ref.a(可能不是標准方法)。 共享庫(例如mylib.so)呢?
要獲取mylib.a,我只需ar -rc mylib.a mylib.o ref.a
不,那是行不通的。 在將ref.a
包含到mylib.a中之前,必須對其進行“擴展”:
mkdir tmp.$$ && cd tmp.$$ && ar x ../ref.a &&
cd .. && ar rc mylib.a mylib.o tmp.$$/*.o &&
rm -rf tmp.$$
共享庫呢
那更簡單:
gcc -shared -o mylib.so mylib.o -Wl,--whole-archive ref.a -Wl,--no-whole-archive
(具有結尾的-Wl,--no-whole-archive
是非常重要的,否則您可能會從編譯器驅動程序添加到鏈接末尾的系統庫中得到討厭的鏈接錯誤。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.