如何在Visual C ++中创建.lib文件和.exe文件?

时间:2010-04-17 11:40:19

标签: c++ visual-c++ linker static-libraries

我目前有一个创建.exe文件的控制台项目;我希望它也创建一个.lib文件,以便编译为DLL的其他项目能够从原始项目中调用函数。

我知道这是可能的,但我找不到怎么做。如何告诉链接器还链接.lib?

5 个答案:

答案 0 :(得分:17)

发布这个作为参考我知道原帖很久以前发布了,但这仍适用于需要解决此问题的任何人。

转到要为其创建.lib文件的项目,然后按照以下步骤操作:

  1. 右键单击该项目。
  2. 选择属性。
  3. 选择构建活动。
  4. 选择预链接事件。
  5. 最后在命令行中粘贴:

    @ECHO ON @ECHO "$(VC_ExecutablePath_x86)\lib.exe" /out:"$(OutDir)$(ProjectName).lib" "$(IntermediateOutputPath)*.obj" "$(VC_ExecutablePath_x86)\lib.exe" /out:"$(OutDir)$(ProjectName).lib" "$(IntermediateOutputPath)*.obj"

  6. 这将调用lib工具从生成的目标文件中生成lib文件。

答案 1 :(得分:10)

一般情况下不可能 - 静态库和可执行文件是完全不同的动物。处理这种情况的方法是创建两个项目 - 一个用于库,其中包含所有功能。还有一个用于可执行文件,它是一个只需调用库中函数的瘦包装器。

答案 2 :(得分:4)

如果导出Application(.exe)项目中的任何符号(例如使用__declspec(dllexport)),则将生成.exe和.lib文件 看到: Why does my Visual C++ .exe project build create .lib and .exp files?

答案 3 :(得分:0)

您不“也链接lib”,您创建了一个静态库项目。后者根本不调用链接器 - 而是用cl /c编译所有文件,并使用.obj将生成的lib.exe组合成一个lib。

答案 4 :(得分:0)

令人惊讶的是,当他们根本不知道答案时,有多少撰稿人傲慢地坚持错误的答案。

要生成与.exe关联的.lib,请在预链接事件中放置以下行:

" $(VC_ExecutablePath_x86)\ LIB.EXE" /out:"$(OutDir)$(ProjectName).lib" " $(IntermediateOutputPath)* OBJ"