我正在尝试编译一个第三方库(在Linux上),并看到它正在生成libsomething. a文件,我有我的其他库,这是.so文件但是看起来即使.a也是共享库,可以像.so lib一样使用那么,两者之间有什么区别呢?或者它们只是相同的命名约定不同。
fivyi3re1#
.a文件是 * 静态库 *,而.so文件是 * 共享对象动态库 *,类似于Windows上的DLL。.a可以在 * 编译 * 过程中 * 作为程序的一部分 * 被包括在内。.so可以被 * 导入 *,而 * 程序被加载 *。
.a
.so
DLL
xienkqul2#
当您链接到*.a时,库中的代码包含在可执行文件本身中,并且无需*.a文件即可运行该可执行文件。当您链接*.so时,情况并非如此,*.so文件必须在运行时存在。
*.a
*.so
vc9ivgsu3#
但看起来即使.a也是共享库不,这是一个静态图书馆。并且可以像a .so lib一样使用如果你指的是链接到它,那么是的。但是你不能dlopen()一个.a文件,而你可以用一个.so文件来做。你可以随时让我们的老朋友Uncle G来回答你的问题。
3条答案
按热度按时间fivyi3re1#
.a
文件是 * 静态库 *,而.so
文件是 * 共享对象动态库 *,类似于Windows上的DLL
。.a
可以在 * 编译 * 过程中 * 作为程序的一部分 * 被包括在内。.so
可以被 * 导入 *,而 * 程序被加载 *。xienkqul2#
当您链接到
*.a
时,库中的代码包含在可执行文件本身中,并且无需*.a
文件即可运行该可执行文件。当您链接*.so
时,情况并非如此,*.so
文件必须在运行时存在。vc9ivgsu3#
但看起来即使.a也是共享库
不,这是一个静态图书馆。
并且可以像a .so lib一样使用
如果你指的是链接到它,那么是的。但是你不能dlopen()一个.a文件,而你可以用一个.so文件来做。
你可以随时让我们的老朋友Uncle G来回答你的问题。