我目前有一个创建.exe文件的控制台项目;我希望它也创建一个.lib文件,以便编译为DLL的其他项目能够从原始项目中调用函数。
我知道这是可能的,但我找不到怎么做。如何告诉链接器还链接.lib?
答案 0 :(得分:17)
发布这个作为参考我知道原帖很久以前发布了,但这仍适用于需要解决此问题的任何人。
转到要为其创建.lib文件的项目,然后按照以下步骤操作:
最后在命令行中粘贴:
@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"
这将调用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"