为什么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 < /C>和 > dll >代码>与项目的名称相同。这可以在项目设置中更改。我不知道
.lib
.dll
的名称是否可以单独更改,尽管如此,但这只会导致混淆。您能否列出一些
指令,告诉编译器/链接器导出某些函数
?导出的
dll
是否会根据
lib
自动命名?假设
curllib.lib
的dll将是
curllib.dll
?我这样问是因为我在可能的目录中找不到任何对
curllib.dll
的明确引用。名称将是相同的。默认情况下,VisualC++将同时给出 > LIB < /C>和 > dll >代码>与项目的名称相同。这可以在项目设置中更改。不过,我不知道
.lib
.dll
的名称是否可以单独更改,但这只会导致混淆。