僅出于學習的目的,我制作了一個主程式的小示例,它暫時通過dlopen(然后通過它從中獲取符號dlsym)加載共享庫,如果前者不可用,則使用默認庫。
在我的機器上,為了使主程式可以使用非默認庫,我需要通過 編譯前者g -fPIC -shared MyLib.cpp -o libMyLib.so,而兩者main.cpp 和DefaultLib.cpp都由g -c main.cpp -o main.oand簡單地編譯g -c DefaultLib.cpp -o DefaultLib.o。如何在 Compiler Explorer 中提供-fPIC -shared編譯選項?MyLib.cpp
當前的嘗試是here,我相信MyLib.cpp它的編譯方式與其他兩個cpp檔案一樣,即沒有提供選項-fPIC和-shared,而且可能最重要的是沒有生成帶有 name 的檔案libMyLib.so,因此導致dlopen加載失敗;實際上,呼叫foo了另一個默認庫。DefaultLib
uj5u.com熱心網友回復:
我可以在 Compiler Explorer 中編譯和 dlopen 動態庫嗎?
是的,這當然是可能的。
在CMakeLists.txt:
add_library(MyLib SHARED MyLib.cpp)
...并MyLib.cpp從add_executable.
然后在main.cpp:
void * lib = dlopen("build/libMyLib.so", RTLD_LAZY);
因為庫是放在build子目錄下的。
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/511321.html
