共享库(.so)文件是否需要在链接时显示(或指定)?

时间:2017-02-03 05:56:08

标签: c++ dll shared-libraries

  

共享库(.so)文件是否需要在链接时显示(或指定)?

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

共享库是否只是在运行时使用dlopendlsym进行链接,以便在链接应用程序时系统中可能没有库?

2 个答案:

答案 0 :(得分:3)

大多数shared libraries需要在构建时和运行时都存在。请注意,共享库不是 DLL s(这是Windows的事情)。

我假设您为Linux编写代码。其他操作系统的细节也不同(并且它们很重要)。

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

但您要问dynamic loading dlopen(3) {使用dlsym(3)plugins ...)Linkers & Loaders。 然后阅读Levine的Program Library HowToC++ dlopen mini HowToHow To Write Shared Libraries和Drepper的this answer

另见Qt plugins

一些库和框架尝试以OS中立的方式抽象插件的加载。阅读例如关于POCO shared libraries支持,或约enter image description here(名称不详,是关于插件)。

答案 1 :(得分:-1)

你可以双管齐下,一切正常。

虽然库在编译时出现,而不是通过dlopen / LoadLibrary明确获取库,但您可以直接使用所有函数