为什么curl同时需要.lib和.dll才能工作?
我刚刚下载并设法用它编制了一个程序 我不明白的是为什么它同时需要为什么curl同时需要.lib和.dll才能工作?,c,dll,curl,C,Dll,Curl,我刚刚下载并设法用它编制了一个程序 我不明白的是为什么它同时需要curllib.lib和curllib.dll 在我看来,要么curllib.lib要么curllib.dll就足够了,为什么两者都要 我还搜索了源代码,但没有找到它使用dlopen加载curllib.dll,那么为什么需要运行curllib.dll?curllib.lib是导入库。它包含实际代码位于DLL中的所有函数的存根,并包含加载DLL的代码。.lib是由生成系统(例如Visual Studio)自动生成的,因此在代码中找不到
curllib.lib
和curllib.dll
在我看来,要么curllib.lib
要么curllib.dll
就足够了,为什么两者都要
我还搜索了源代码,但没有找到它使用
dlopen
加载curllib.dll
,那么为什么需要运行curllib.dll
?curllib.lib
是导入库。它包含实际代码位于DLL中的所有函数的存根,并包含加载DLL的代码。.lib
是由生成系统(例如Visual Studio)自动生成的,因此在代码中找不到任何引用。但是,您会发现一些指令告诉编译器/链接器导出某些函数:
- 函数声明上的declspec(dllexport)将导出该函数。这很方便,但是是特定于Microsoft的。例如:
void\uuu declspec(dllexport)foobar(int-qux)代码>
- 或者,可以使用一个
文件,该文件明确列出了导出的所有函数。例如:.def
库MYFOO
导出
foobar@1
如果确实需要,可以不使用
.lib
,但必须手动使用LoadLibrary
、GetProcAddress
和friends来调用DLL中的函数。curllib.lib
是导入库。它包含实际代码位于DLL中的所有函数的存根,并包含加载DLL的代码。.lib
是由生成系统(例如Visual Studio)自动生成的,因此在代码中找不到任何引用。但是,您会发现一些指令告诉编译器/链接器导出某些函数:
- 函数声明上的declspec(dllexport)将导出该函数。这很方便,但是是特定于Microsoft的。例如:
void\uuu declspec(dllexport)foobar(int-qux)代码>
- 或者,可以使用一个
文件,该文件明确列出了导出的所有函数。例如:.def
库MYFOO
导出
foobar@1
如果您确实想要,您可以不使用
.lib
,但是您必须手动使用LoadLibrary
、GetProcAddress
和friends来调用DLL中的函数。在Windows上使用DLL时,您通常将其与.lib
文件一起使用,该文件告诉链接器足以创建可执行文件。然后,可执行文件在运行时使用.dll
文件
当然,
dlopen
是一种UNIX/Linux/POSIX类型的东西——在Windows上的等价物应该是LoadLibrary
。您通常会将dlopen
与.so
文件一起使用。当您在Windows上使用DLL时,通常会将其与.lib
文件一起使用,该文件告诉链接器足以创建可执行文件。然后,可执行文件在运行时使用.dll
文件
当然,
dlopen
是一种UNIX/Linux/POSIX类型的东西——在Windows上的等价物应该是LoadLibrary
。您通常将dlopen
与.so
文件一起使用。需要运行.dll
。.lib
的存在使得链接器可以解析函数名中的序号和地址,并且只在链接时需要
其他系统(如Linux)在共享库中维护完整的链接信息,不需要这样做。需要运行
.dll
。.lib
的存在使得链接器可以解析函数名中的序号和地址,并且只在链接时需要
其他系统(如Linux)在共享库中维护完整的链接信息,不需要这样做。dll和lib之间的区别如下:dll和lib之间的区别如下:您能否列出一些
指令,告诉编译器/链接器导出某些函数
?导出的dll
是否会根据到库
?假设curllib.lib
的dll将是curllib.dll
?我这样问是因为我在可能的目录中找不到任何对curllib.dll
的明确引用。名称将是相同的。默认情况下,VisualC++将同时给出.lib
和.dll
的名称是否可以单独更改,尽管如此,但这只会导致混淆。您能否列出一些指令,告诉编译器/链接器导出某些函数
?导出的dll
是否会根据lib
自动命名?假设curllib.lib
的dll将是curllib.dll
?我这样问是因为我在可能的目录中找不到任何对curllib.dll
的明确引用。名称将是相同的。默认情况下,VisualC++将同时给出.lib
和.dll
的名称是否可以单独更改,但这只会导致混淆。