我不明白这两种类型的库之间的区别,很多网站都说它们是同一件事,但在学校我们使用两种不同的命令来创建它们
动态库
$ gcc -shared -o libsample.so lib.c
$ gcc -o main main.c -ldl
执行:
$ ./main ./libsample.so
共享库
$ gcc -shared -o libsample.so lib.c
$ gcc -o main main.c -L. -lsample
执行:
$ LD_LIBRARY_PATH=. ./main
有人可以帮助我理解这两个“代码”之间的区别吗?
最佳答案
动态链接库 (.DLL
) 是 Microsoft Windows 使用的术语。 共享对象 (.so
) 是 Unix 和 Linux 使用的术语。
除此之外,从概念上讲它们是相同的。
关于你的命令片段,我猜差异(我只是在这里猜测,因为你没有向我们展示相关部分)是如何加载库的。有“链接时加载”,其中库通过链接器与可执行文件绑定(bind)在一起。还有“运行时加载”,程序在其中“摄取”动态/共享库。
运行时加载是在 Windows 中通过 LoadLibrary
完成的(有一个 …A
和一个 …W
变体)函数,在 Unix/Linux 上为 dlopen
(由 libdl
提供,而 -ldl
库链接语句链接到该库)。
1:链接器是根据各个编译阶段创建的中间对象创建实际可执行文件的程序。
关于c - C 中的共享库和动态库有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56899488/