Как я могу скомпилировать файл .dll из 2005 с MSV C? - PullRequest
0 голосов
/ 19 марта 2020

Мне нужно скомпилировать старую версию lame_en c .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\10\Include\10.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   

MSBuild и Devenv от 2019, 2015 и 2010 гг. Привели к одной и той же ошибке.

C:\Program Files (x86)\Windows Kits\10\Include\10.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]

Это - точная версия и файлы, с которыми я работаю.

Что мне нужно использовать / сделать для компиляции DLL?

1 Ответ

0 голосов
/ 20 марта 2020

Что мне нужно использовать / сделать для компиляции dll?

Visual Studio 14+ определяет snprintf до _snprintf в stdio.h.

Решение

1) Запустите VS2019 от имени администратора и затем снова откройте ваш проект

2) , пожалуйста, измените их в stdio.h файл:

 #if defined snprintf
 .....
 #endif

* от 1024 * до

#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

enter image description here

Поэтому, пожалуйста, измените #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 является проектом библиотеки классов, и мы не можем напрямую отлаживать проект lib, так как мы должны запустить исполняемый проект (xxx.exe) и затем обратиться к этой библиотеке, после чего мы можем отладить Это. См. эту ссылку .

enter image description here

Я обнаружил, что проект lame - это исполняемый проект, на который, я думаю, он уже ссылался libmp3lame.lib, поэтому вы должны сначала изменить его в качестве запускаемого проекта, а затем щелкнуть правой кнопкой мыши по проекту -> свойства -> Linker -> General -> изменить файл вывода на $(OutDir)$(TargetName)$(TargetExt).

или создать новый исполняемый проект, а затем ссылаться на libmp3lame.lib. Как ссылаться на lib вы можете обратиться к this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...