【发布时间】:2021-10-21 16:02:17
【问题描述】:
有这么简单的Win32汇编程序
.386
.model flat, c
option casemap :none
;includelib C:\Users\Darek\Dev\VC\lib\libcmt.lib
;includelib C:\Users\Darek\Dev\VC\lib\legacy_stdio_definitions.lib
EXTERN printf :PROC ; declare printf
.data
HelloWorld db "Hello j World!:-)", 0
.code
main PROC
push offset HelloWorld
call printf
add esp, 4
ret
main ENDP
END
我想把入口点的名字从标准的main改成my_start,所以我把main函数的名字改成了@ 987654323@
...
my_start PROC
...
my_start ENDP
...
然后像下面这样链接
link /ENTRY:my_start /SUBSYSTEM:CONSOLE HelloWorld.obj libcmt.lib
但得到链接器错误:
在 _mainCRTStartup 中调用了未定义的外部符号 _main 为什么链接器会引入 ENTRY 选项? 我做错了什么以及如何让它发挥作用?
附言
我正在使用MSVC 2019 提供的ml 和link
【问题讨论】:
-
实际入口点在 C 库中,然后调用您的
main。 -
@Jester 对不起,你能解释一下吗?
-
尝试使用“msvcrt.lib”而不是“libcmt.lib”。我试过你的代码在顶部附近添加以下行:
includelib "\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\msvcrt.lib"(无需向链接器命令添加任何额外的文件)并且它有效。 -
@AdrianMole。好的 thx 从
libcmt更改为msvcrt做的工作但是你能这么好,并解释我为什么libcmt的解决方案不起作用?libcmt不接受入口点选项吗?
标签: windows visual-studio assembly masm