MS Visual Studio 2010, как использовать файл.asm
Я хотел бы спросить о том, что я думаю попробовать с Visual Studio 2010.
Я генерирую файл.asm из файла.cpp, установив опцию "Вывод ассемблера" в свойствах проекта -> C/C++ -> Выходные файлы (/FA).
У меня вопрос: как я могу на следующем шаге использовать этот сгенерированный файл.asm, чтобы снова связать с ним файл, не используя больше файл.cpp, на случай, если я захочу внести некоторые изменения в файл.asm, а затем снова связать, сохранив изменения, которые я сделал на уровне сборки.
Было бы очень полезно, если бы вы могли предоставить точные шаги, включая правильную конфигурацию, которая может потребоваться в свойствах проекта.
3 ответа
Просто перетащите файлы.obj в проект (дерево обозревателя решений): как включить файлы.obj в проект
Я сделал это недавно. Вот повторение ответа, который я дал здесь: /questions/21623410/skompilirovat-vyivod-sborki-sgenerirovannyij-vc/21623422#21623422. Оказывается, вы все еще можете делать это в 32-битном режиме в MSVC2012, но я думаю, что 64-битный режим безнадежен.
Для 32-битного режима вот что вы делаете.
Создайте пустой проект и исходный файл Source.cpp
#include <stdio.h>
int main() {
printf("hello world\n");
return 0;
}
- Щелкните правой кнопкой мыши на вашем проекте и выберите "Build Customization" и
выберите masm, как описано здесь http://www.masm32.com/board/index.php?topic=9231.0 - Под C++/OutputFiles выберите Сборка Выход / FA
- Comipile в 32-битном режиме Release mode
- Загрузите файл Source.asm в MSVC, чтобы вы могли просмотреть его. Это пока не сработает. Несколько изменений все еще необходимы.
- В C++ / Оптимизация отключить Оптимизацию всей программы (удаляет
/GL
). Это добавляет строкуINCLUDELIB MSVCRT
- В Linker/Advanced установите для последней опции "Image Has Safe Exception Обработчики" значение No (
/SAFESEH:NO
) - Теперь у вас должен быть файл Source.asm, который будет делать то же самое, что и файл Source.cpp. Скопируйте Source.cpp из каталога Release в тот же каталог, что и Source.cpp (чтобы он не удалялся при сборке / очистке).
- Добавьте Source.asm (как существующий файл) к исходным файлам и удалите Source.cpp из сборки.
- Перестройте, и вы должны увидеть "Hello World" без необходимости менять какие-либо сборочные линии вручную.
Я использовал это для более сложных функций. Я обычно делаю это на отдельном модуле и использую extern "C"
на имя функции, чтобы удалить искажение имени C++.