如何使用 MSVC 编译 2005 年的 .dll 文件?
How can I compile a .dll file from 2005 with MSVC?
我需要编译旧版本的 lame_enc.dll(MP3 编码器,版本 3.97)。
单向迁移到 Visual Studio 2019 报告可能需要更改代码才能正确创建项目。尝试编译 DLL 时,出现多个警告和以下错误。
C1189 #error: Macro definition of snprintf conflicts with Standard Library function declaration libmp3lame C:\Program Files (x86)\Windows Kits\Include.0.18362.0\ucrt\stdio.h 1935
LNK1181 Cannot open Input file "C:\Users\*\Desktop\lame-3.97\libmp3lame\Debug\libmp3lame.lib". LameMp3EncDll C:\Users\*\OneDrive\Desktop\lame-3.97\Dll\LINK 1
2019 年、2015 年和 2010 年的 MSBuild 和 Devenv 都导致了同样的错误。
C:\Program Files (x86)\Windows Kits\Include.0.18362.0\ucrt\stdio.h(1935,1): fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration [C:\Users\*\Desktop\lame-3.97\libmp3lame\libmp3lame_vc7.vcxproj]
This 是我正在使用的确切版本和文件。
编译dll需要什么use/do?
What do I need to use/do to compile the dll?
Visual Studio 14+在stdio.h
.
中定义snprintf
到_snprintf
解决方案
1) 运行 VS2019 as Administrator 然后重新打开你的项目
2) 请在 stdio.h
文件中更改这些:
#if defined snprintf
.....
#endif
到
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
3) Edit
-->Find and Replace
-->Find in Files
-->
查找内容: #\s*define\s+snprintf
查看:整个解决方案(包括外部项目)
选择Match case
和Use Regular Expressions
所以请将#define snprintf _snprintf
改为:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
注意:在id3tag.c
文件中更改这些
改变
#ifdef _MSC_VER
#define snprintf _snprintf
#endif
至:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
更新 1
libmp3lame
项目是一个class库项目,我们不能直接调试lib项目,方法是我们应该运行一个可执行项目(xxx.exe)然后引用这个lib,之后我们就可以调试了。参见 。
我发现 lame
项目是一个可执行项目,我认为它已经引用了 libmp3lame.lib
,所以你应该先将其更改为启动项目,然后右键单击该项目-- >properties-->Linker-->General-->change Output File to $(OutDir)$(TargetName)$(TargetExt)
.
或创建一个新的可执行项目然后引用libmp3lame.lib
。如何引用lib可以参考this.
我需要编译旧版本的 lame_enc.dll(MP3 编码器,版本 3.97)。
单向迁移到 Visual Studio 2019 报告可能需要更改代码才能正确创建项目。尝试编译 DLL 时,出现多个警告和以下错误。
C1189 #error: Macro definition of snprintf conflicts with Standard Library function declaration libmp3lame C:\Program Files (x86)\Windows Kits\Include.0.18362.0\ucrt\stdio.h 1935
LNK1181 Cannot open Input file "C:\Users\*\Desktop\lame-3.97\libmp3lame\Debug\libmp3lame.lib". LameMp3EncDll C:\Users\*\OneDrive\Desktop\lame-3.97\Dll\LINK 1
2019 年、2015 年和 2010 年的 MSBuild 和 Devenv 都导致了同样的错误。
C:\Program Files (x86)\Windows Kits\Include.0.18362.0\ucrt\stdio.h(1935,1): fatal error C1189: #error: Macro definition of snprintf conflicts with Standard Library function declaration [C:\Users\*\Desktop\lame-3.97\libmp3lame\libmp3lame_vc7.vcxproj]
This 是我正在使用的确切版本和文件。
编译dll需要什么use/do?
What do I need to use/do to compile the dll?
Visual Studio 14+在stdio.h
.
snprintf
到_snprintf
解决方案
1) 运行 VS2019 as Administrator 然后重新打开你的项目
2) 请在 stdio.h
文件中更改这些:
#if defined snprintf
.....
#endif
到
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
3) Edit
-->Find and Replace
-->Find in Files
-->
查找内容: #\s*define\s+snprintf
查看:整个解决方案(包括外部项目)
选择Match case
和Use Regular Expressions
所以请将#define snprintf _snprintf
改为:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
注意:在id3tag.c
文件中更改这些
改变
#ifdef _MSC_VER
#define snprintf _snprintf
#endif
至:
#if _MSC_VER < 1900
# define snprintf _snprintf
#endif
更新 1
libmp3lame
项目是一个class库项目,我们不能直接调试lib项目,方法是我们应该运行一个可执行项目(xxx.exe)然后引用这个lib,之后我们就可以调试了。参见
我发现 lame
项目是一个可执行项目,我认为它已经引用了 libmp3lame.lib
,所以你应该先将其更改为启动项目,然后右键单击该项目-- >properties-->Linker-->General-->change Output File to $(OutDir)$(TargetName)$(TargetExt)
.
或创建一个新的可执行项目然后引用libmp3lame.lib
。如何引用lib可以参考this.