В настоящее время используется Microsoft Visual Studio Community 2019 версии 16.4.4 и компилируется проект C.
Я хочу иметь возможность выводить сборку из VS, вносить изменения в сборку и затем компилировать измененную сборку в исполняемый файл. Ниже я расскажу о своих попытках следовать инструкциям из предыдущего вопроса SO, но если есть альтернатива (даже без использования VS), я был бы признателен за эти предложения.
В качестве теста я использовал простой "привет Программа "world":
#include <stdio.h>
int main(int argc, char* argv) {
printf("Hello world\n");
return 0;
}
Я пытался скомпилировать эту программу, следуя инструкциям, данным этим ответом , но я получаю следующие ошибки:
LNK2005 ___local_stdio_printf_options уже определено в helloworld.obj
LNK1169 найден один или несколько кратно определенных символов
Похоже, что VS на самом деле компилирует сборку в объектные файлы, но компоновщик говорит, что "___local_stdio_printf_options "символ уже определен во время соединения. Когда я оглядываюсь назад на вывод кода ассемблера от VS, это выглядит так:
___local_stdio_printf_options PROC ; COMDAT
; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_stdio_config.h
; Line 86
push ebp
mov ebp, esp
; Line 88
mov eax, OFFSET ?_OptionsStorage@?1??__local_stdio_printf_options@@9@9 ; `__local_stdio_printf_options'::`2'::_OptionsStorage
; Line 89
pop ebp
ret 0
___local_stdio_printf_options ENDP
Так что выглядит , как решение для этого может быть для предотвращения компилятора VS от определить ___local_stdio_printf_options или изменить настройку компоновщика, чтобы каким-либо образом принять этот стиль кодирования. Я не знаю, почему VS будет производить код, который определяет внешние символы, как это. Буду очень признателен за любую помощь.