代码之家  ›  专栏  ›  技术社区  ›  Adam Naylor

未创建.lib文件(vs2008)

  •  10
  • Adam Naylor  · 技术社区  · 17 年前

    我在解决方案中添加了一个dll项目,并由一个可执行项目显式引用它。 可执行文件抱怨找不到lib。

    对于如何设置项目以创建所需的lib文件有什么想法吗? 为什么项目不创建一个呢????

    干杯

    注释 我已经搜索了项目,但文件没有在任何地方创建。

    4 回复  |  直到 17 年前
        1
  •  12
  •   Jeremy    17 年前

    在dll项目的“链接器->高级属性”选项卡中,验证导入库(您要查找的.lib文件)的值是否正确/合理。此属性的值将确定导入库的名称以及链接器将其写入的位置。

    您可能还需要在项目中生成导入定义文件(.def),或者检查头文件,并确保导出的函数在头文件中标记了udeclspec(dllexport)限定符。这通常通过定义来切换,例如:

    #ifdef MYAPI_EXPORTS
    #define MYAPI_API __declspec(dllexport)
    #else
    #define MYAPI_API __declspec(dllimport)
    #endif
    
    void MYAPI_API foo(int bar);
    

    基本上,您希望编译器在构建库时看到dllexport,但在客户机代码包括头文件时看到dllimport。如果Visual Studio生成了基本的项目结构,它可能已经创建了一个合适的定义来使用。

    您不必同时创建.def文件和添加dllexport,只需要一个或另一个。我更喜欢后者。此外,如果选择使用.def文件,则需要在库项目的链接器属性中指定该文件。

        2
  •  4
  •   Zekaric    17 年前

    我以前见过这个。而且最近又有了新的点击率。如果不导出任何内容,则不会创建.lib文件。导出函数有两种方式。

    1)用uu declspec(dllexport)标记函数。

    或

    2)使用一个.def文件,列出所有要导出的函数。

    解决方案:

    1)通常需要设置编译时标志来激活预处理器块,以便将某些定义设置为u declspec()。其他人在他们的帖子里列出了这一点。

    2)需要设置行属性->链接器->输入->模块定义文件。

        3
  •  1
  •   Vinay    17 年前

    是否已将lib文件包含在项目属性->链接器->exe项目的输入表中?

    还要确保在链接器选项卡中包含了其他引用。

        4
  •  1
  •   Matt Jordan    17 年前

    检查生成DLL的项目。如果它不产生一个.lib,你可能还没有告诉它。可以在属性->常规->配置类型(选择static library.lib)中将项目的输出从dll更改为静态库。