我在这里(Difference between shared objects (.so), static libraries (.a), and DLL's (.so)?)阅读到,.so文件必须在编译时出现,但以我的经验,这是不正确的?

共享库不是仅在运行时使用dlopendlsym链接到的,以便在链接应用程序时该库可能不存在于系统上吗?

最佳答案

大多数shared libraries需要在构建时和运行时都出现。请注意,共享库不是DLL(这是Windows的东西)。

我假设您为Linux编写代码。其他操作系统上的详细信息有所不同(并且很重要)。

例如,如果要编译Qt应用程序,则在构建应用程序和运行它时都需要Qt共享库(例如/usr/lib/x86_64-linux-gnu/libQt5Gui.so和许多其他共享库)。阅读有关动态链接器ld-linux.so(8)和有关ELF的信息。

但是,您正在询问dynamic loadingdlopen(3)(将dlsym(3)plugins ...结合使用)。
然后阅读Levine的Linkers & LoadersProgram Library HowToC++ dlopen mini HowTo和Drepper的How To Write Shared Libraries

另请参见this answer

一些库和框架尝试以与操作系统无关的方式抽象化插件的加载。阅读例如关于Qt plugins的支持,或关于POCO shared libraries(名称不正确,它是关于插件的)。

关于c++ - 共享库(.so)文件是否需要在链接时显示(或指定)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42017681/

10-13 06:11
查看更多