为什么curl需要.lib和.dll才能工作?

时间:2010-07-15 15:50:33

标签: c dll curl

我刚刚下载了curl并设法用它构建了一个程序。

我不明白为什么它需要curllib.libcurllib.dll

在我看来,curllib.libcurllib.dll应该足够了,为什么两者兼而有之?

此外,我搜索了源代码,但未找到使用dlopen加载curllib.dll的任何地方,那么为什么curllib.dll需要运行?

3 个答案:

答案 0 :(得分:3)

curllib.lib是导入库。它包含实际代码在DLL中的所有函数的存根,它包含加载DLL的代码。 .lib由构建系统(例如Visual Studio)自动生成,这就是您在代码中找不到任何引用的原因。但是,您会发现一些指令告诉编译器/链接器导出某些函数:

    函数声明中的
  • __declspec(dllexport)将导出该函数。这很方便,但特定于Microsoft。例如:

    void __declspec(dllexport) foobar(int qux);

    More information here

  • 或者,可以使用.def文件,该文件明确列出导出的所有函数。例如:

    LIBRARY MYFOO
    EXPORTS
    foobar @1

    More information here

如果你真的想要,你可以不用.lib,但你必须手动使用LoadLibraryGetProcAddress和朋友来调用DLL中的函数。

答案 1 :(得分:1)

运行.dll是必需的。 .lib存在,因此链接器可以从函数名称解析序数和地址,并且仅在链接时需要。

其他系统(如Linux)在共享库中维护完整的链接信息,不需要这样做。

答案 2 :(得分:0)

在Windows上使用DLL时,通常将其与.lib文件一起使用,该文件告诉链接器足以创建可执行文件。然后,可执行文件在运行时使用.dll文件。

OTOH,dlopen是一种UNIX / Linux / POSIX类型的东西 - 在Windows上的等价物是LoadLibrary。您通常会将dlopen.so文件一起使用。