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;
 }
  1. Щелкните правой кнопкой мыши на вашем проекте и выберите "Build Customization" и
    выберите masm, как описано здесь http://www.masm32.com/board/index.php?topic=9231.0
  2. Под C++/OutputFiles выберите Сборка Выход / FA
  3. Comipile в 32-битном режиме Release mode
  4. Загрузите файл Source.asm в MSVC, чтобы вы могли просмотреть его. Это пока не сработает. Несколько изменений все еще необходимы.
  5. В C++ / Оптимизация отключить Оптимизацию всей программы (удаляет /GL). Это добавляет строку INCLUDELIB MSVCRT
  6. В Linker/Advanced установите для последней опции "Image Has Safe Exception Обработчики" значение No (/SAFESEH:NO)
  7. Теперь у вас должен быть файл Source.asm, который будет делать то же самое, что и файл Source.cpp. Скопируйте Source.cpp из каталога Release в тот же каталог, что и Source.cpp (чтобы он не удалялся при сборке / очистке).
  8. Добавьте Source.asm (как существующий файл) к исходным файлам и удалите Source.cpp из сборки.
  9. Перестройте, и вы должны увидеть "Hello World" без необходимости менять какие-либо сборочные линии вручную.

Я использовал это для более сложных функций. Я обычно делаю это на отдельном модуле и использую extern "C" на имя функции, чтобы удалить искажение имени C++.

Другие вопросы по тегам