出于学习的目的,我制作了一个主程序的小示例,该示例通过 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
?
当前尝试是here ,我相信,MyLib.cpp
的编译就像其他两个 cpp
文件一样,即不提供选项 -fPIC
和 -shared
,也许最重要的是没有生成名为 libMyLib.so
的文件,从而导致 dlopen
无法加载;事实上,调用了另一个默认库 DefaultLib
中的 foo
。
最佳答案
Can I compile and dlopen a dynamic library in Compiler Explorer?
是的,这当然有可能。
在CMakeLists.txt
中:
add_library(MyLib SHARED MyLib.cpp)
...并从 add_executable
中删除 MyLib.cpp
。
然后在main.cpp
中:
void * lib = dlopen("build/libMyLib.so", RTLD_LAZY);
因为库被放置在build
子目录中。
关于c++ - 我可以在 Compiler Explorer 中编译并 dlopen 动态库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74000607/