У меня есть простая программа для приветствия мира C и скомпилируйте ее с помощью/FA. Как следствие, компилятор также генерирует соответствующий список сборок. Теперь я хочу использовать masm/link для сборки исполняемого файла из сгенерированного списка .asm.Вывод сборки компиляции, созданный VC++?
Следующая командная строка дает 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
, указывающие, что функции С-среда выполнения не были связаны с объектных файлов, произведенных ранее:
asm_test.obj : error LNK2001: unresolved external symbol @[email protected] asm_test.obj : error LNK2001: unresolved external symbol _printf LINK : error LNK2001: unresolved external symbol _wmainCRTStartup asm_test.exe : fatal error LNK1120: 3 unresolved externals
Здесь генерируется сборка листинга
; 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 [email protected][email protected]@[email protected] ; `string'
EXTRN @[email protected]:PROC
EXTRN _printf:PROC
; COMDAT [email protected][email protected]@[email protected]
CONST SEGMENT
[email protected][email protected]@[email protected] 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 [email protected][email protected]@[email protected]
call _printf
add esp, 4
; Line 22
xor eax, eax
; Line 23
ret 0
_wmain ENDP
_TEXT ENDS
END
Я использую последнюю версию masm32 (6.14.8444).
Update:
Как было предложено Зубчатым, я включил в источнике ассемблерного в INCLUDELIB msvcrt.lib
. Программа компилируется и создаются исполняемый файл, но компоновщик генерирует предупреждение:
msvcrt.lib(crtmanifestrtm.obj) : warning LNK4044: unrecognized option "manifestdependency:type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'"; ignored
Когда я запустить исполняемый файл, среда выполнение C генерирует следующее сообщение об ошибке:
Runtime error: R6034 An application has made an attempt to load the C runtime library incorrectly
Вы предоставили путь к библиотекам, но вы не указали ни одну из самих библиотек, к которой вы хотите привязать. Я не уверен, имя библиотек, на которые вам нужно будет ссылаться, хотя (следовательно, комментарий вместо ответа). – Cogwheel
Возможно, msvcrt.lib? – Cogwheel
Ну, это, безусловно, имеет какое-то отношение к файлам манифеста, но в этом я довольно сильно застенчив. Может быть, создать простой простой проект на C++ и просмотреть настройки компоновщика для подсказок? – Cogwheel