Скомпилировать Вывод блока, сгенерированный VC ++?

Я имею простое привет мир C программа и компилирую его с / FA. Как следствие компилятор также генерирует соответствующий протокол ассемблирования. Теперь я хочу использовать masm/link для сборки исполняемого файла из сгенерированного списка .asm.

Следующая командная строка приводит к 3 ошибкам компоновщика:

\masm32\bin\ml /I"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include" /c /coff asm_test.asm
\masm32\bin\link /SUBSYSTEM:CONSOLE /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\lib" asm_test.obj

указание, что C-функции-времени-выполнения не были связаны с объектными файлами, произвело ранее:

asm_test.obj: ошибка LNK2001: неразрешенная внешняя ссылка __ security_check_cookie@4 asm_test.obj: ошибка LNK2001: неразрешенная внешняя ссылка _printf ССЫЛКА: ошибка LNK2001: неразрешенная внешняя ссылка _wmainCRTStartup asm_test.exe: фатальная ошибка LNK1120: 3 неразрешенного внешнего облика

Вот сгенерированный протокол ассемблирования

; Listing generated by Microsoft (R) Optimizing Compiler Version 15.00.30729.01 

    TITLE   c:\asm_test\asm_test\asm_test.cpp
    .686P
    .XMM
    include listing.inc
    .model  flat

INCLUDELIB OLDNAMES

PUBLIC  ??_C@_0O@OBPALAEI@hello?5world?$CB?6?$AA@   ; `string'
EXTRN   @__security_check_cookie@4:PROC
EXTRN   _printf:PROC
;   COMDAT ??_C@_0O@OBPALAEI@hello?5world?$CB?6?$AA@
CONST   SEGMENT
??_C@_0O@OBPALAEI@hello?5world?$CB?6?$AA@ DB 'hello world!', 0aH, 00H ; `string'
CONST   ENDS
PUBLIC  _wmain
; Function compile flags: /Ogtpy
;   COMDAT _wmain
_TEXT   SEGMENT
_argc$ = 8                      ; size = 4
_argv$ = 12                     ; size = 4
_wmain  PROC                        ; COMDAT
; File c:\users\octon\desktop\asm_test\asm_test\asm_test.cpp
; Line 21
    push    OFFSET ??_C@_0O@OBPALAEI@hello?5world?$CB?6?$AA@
    call    _printf
    add esp, 4
; Line 22
    xor eax, eax
; Line 23
    ret 0
_wmain  ENDP
_TEXT   ENDS
END

Я использую последнюю masm32 версию (6.14.8444).

Обновление:

Как предложено Зубчатым колесом, я включал INCLUDELIB msvcrt.lib в asm источнике. Компиляции программы и исполняемый файл создаются, но компоновщик генерирует предупреждение:

msvcrt.lib (crtmanifestrtm.obj): предупреждение LNK4044: нераспознанная опция "manifestdependency:type ='win32' называет ='Microsoft. VC90. CRT' версия = '9.0.21022.8' processorArchitecture ='x86' publicKeyToken = '1fc8b3b9a1e18e3b'"; проигнорированный

Когда я запускаю исполняемый файл, время выполнения C генерирует следующую ошибку:

Ошибка периода выполнения: R6034 приложение предпринял попытку загрузить библиотеку времени выполнения C неправильно

6
задан SDD 13 May 2010 в 23:14
поделиться