[英]Can I compile and dlopen a dynamic library in Compiler Explorer?
只是為了學習的目的,我做了一個主程序的小例子,它通過dlopen
暫時加載一個共享庫(然后通過dlsym
從它加載一個符號),如果前者不可用,則使用默認的。
在我的機器上,為了使非默認庫可用於主程序,我需要通過g++ -fPIC -shared MyLib.cpp -o libMyLib.so
編譯前者,而main.cpp
和DefaultLib.cpp
都是簡單編譯的通過g++ -c main.cpp -o main.o
和g++ -c DefaultLib.cpp -o DefaultLib.o
。 如何在編譯器資源管理器中為MyLib.cpp
的編譯提供-fPIC -shared
-shared 選項?
目前的嘗試是在這里,我相信, MyLib.cpp
的編譯就像其他兩個cpp
文件一樣,即沒有提供選項-fPIC
和-shared
,也許最重要的是沒有生成名為libMyLib.so
的文件,因此導致dlopen
加載失敗; 實際上,來自另一個默認庫DefaultLib
的foo
被調用。
我可以在 Compiler Explorer 中編譯和 dlopen 動態庫嗎?
是的,這當然是可能的。
在CMakeLists.txt
中:
add_library(MyLib SHARED MyLib.cpp)
...並從add_executable
MyLib.cpp
然后在main.cpp
中:
void * lib = dlopen("build/libMyLib.so", RTLD_LAZY);
因為庫是放在build
子目錄下的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.