Shu*_*eng 6 c++ dll shared-libraries
共享库(.so)文件是否需要在链接时显示(或指定)?
我在这里已经读到了(共享对象(.so),静态库(.a)和DLL(.so)之间的区别?),. so文件必须在编译时出现,但是根据我的经验,这不是真的吗?
共享库不是仅在运行时使用dlopen和链接dlsym,以便在链接应用程序时该库可能不存在于系统上吗?
大多数共享库需要在构建时和运行时都存在。请注意,共享库不是 DLL(这是 Windows 的东西)。
我假设您为 Linux 编写代码。其他操作系统的细节有所不同(它们很重要)。
例如,如果您正在编译 Qt 应用程序,/usr/lib/x86_64-linux-gnu/libQt5Gui.so 则在构建应用程序和运行应用程序时都需要 Qt 共享库(例如和许多其他库)。阅读关于动态链接器ld-linux.so(8)和关于ELF 的信息。
但是您正在询问插件的动态加载(使用dlopen(3)和dlsym(3) ...)。然后阅读 Levine 的Linkers & Loaders、Program Library HowTo、C++ dlopen mini HowTo和 Drepper 的How To Write Shared Libraries
另请参阅此答案。
一些库和框架试图以与操作系统无关的方式抽象插件的加载。阅读例如关于Qt 插件支持或关于POCO 共享库的内容(名称不佳,它是关于插件的)。
| 归档时间: |
|
| 查看次数: |
2248 次 |
| 最近记录: |