c++ - 我可以在 Compiler Explorer 中编译并 dlopen 动态库吗?

标签 c++ lazy-loading dynamic-linking dlopen compiler-explorer

出于学习的目的,我制作了一个主程序的小示例,该示例通过 dlopen 暂时加载共享库(然后通过 dlsym 加载其中的符号) >) 并使用默认值(如果前者不可用)。

在我的机器上,为了使非默认库可供主程序使用,我需要通过 g++ -fPIC -shared MyLib.cpp -o libMyLib.so 来编译前者,而两者main.cppDefaultLib.cpp 只需通过 g++ -c main.cpp -o main.og++ -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子目录中。

Demo

关于c++ - 我可以在 Compiler Explorer 中编译并 dlopen 动态库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74000607/

相关文章:

macos - 在使用 dlopen() 加载的 DLL 中覆盖 @executable_path

linux - 如何打印运行进程的链接图?

c++ - 如何在我的 DLL 中调用我的 exe 中定义的函数?

c++ - QFile和QTextStream帮助(用Usernames、passwords和names为用户写一个ID)

jquery - LazyLoad 不是函数

Angular 延迟加载模块和共享模型类

c - 构建可执行文件时涉及 .so 库时未定义的错误引用

c++ - 基于模板参数创建多个类实现

c++ - 使用 gmp 固定大小的整数...?

javascript - Angular 延迟加载 - 没有看到它正在工作