未解析的外部(旧编译器)
Unresolved external (old compiler)
我正在尝试用 ASM 程序编译 C 程序。它应该是 16 位的,所以我使用的是 Visual C++ 1.0 和 MASM 6.11。
ASM 代码:
.MODEL MEDIUM
EXTRN first:WORD, second:WORD, third:WORD
.CODE
_Add_Ext PROC FAR
mov AX, first
add AX, second
mov third, AX
_Add_Ext ENDP
END
我已经编译成.obj文件
ml.exe -c -Cx -FoC:\prjcts_6_7.obj C:\prjcts_6_7.asm
并包含在项目中。
C代码:
#include <stdio.h>
int first = 1, second = 2, third = 0;
void main (void)
{
printf("\nBefore adding third = %d", third);
Add_Ext();
printf("\nAfter adding third = %d", third);
}
当我试图编译它时,它给了我:
Compiling...
c:\prjcts_6_6.c
Linking...
C:\PRJCTS_6_7.OBJ(C:\prjcts_6_7.asm) : error L2029: 'first' : unresolved external
C:\PRJCTS_6_7.OBJ(C:\prjcts_6_7.asm) : error L2029: 'third' : unresolved external
C:\PRJCTS_6_7.OBJ(C:\prjcts_6_7.asm) : error L2029: 'second' : unresolved external
LINK returned error code 2.
Creating browser database...
2_6.EXE - 3 error(s), 0 warning(s)
所以它看到我的 .obj
,明白它是什么,但无法弄清楚从 C 代码中获取变量?我不想使用内联汇编程序,但我之前尝试过,而且有效。
简单猜测,这将是 C
名称修改。 C 中的 extern 往往会在前面加上 _
EXTRN _first:WORD, _second:WORD, _third:WORD
非常感谢!
也许代码是针对 Microsoft C 或类似的东西,而不是 VC++ 1.0
此代码有效。
.MODEL MEDIUM
EXTRN _first:WORD, _second:WORD, _third:WORD
.CODE
_Add_Ext PROC FAR
mov AX, _first
add AX, _second
mov _third, AX
_Add_Ext ENDP
END
我正在尝试用 ASM 程序编译 C 程序。它应该是 16 位的,所以我使用的是 Visual C++ 1.0 和 MASM 6.11。
ASM 代码:
.MODEL MEDIUM
EXTRN first:WORD, second:WORD, third:WORD
.CODE
_Add_Ext PROC FAR
mov AX, first
add AX, second
mov third, AX
_Add_Ext ENDP
END
我已经编译成.obj文件
ml.exe -c -Cx -FoC:\prjcts_6_7.obj C:\prjcts_6_7.asm
并包含在项目中。
C代码:
#include <stdio.h>
int first = 1, second = 2, third = 0;
void main (void)
{
printf("\nBefore adding third = %d", third);
Add_Ext();
printf("\nAfter adding third = %d", third);
}
当我试图编译它时,它给了我:
Compiling...
c:\prjcts_6_6.c
Linking...
C:\PRJCTS_6_7.OBJ(C:\prjcts_6_7.asm) : error L2029: 'first' : unresolved external
C:\PRJCTS_6_7.OBJ(C:\prjcts_6_7.asm) : error L2029: 'third' : unresolved external
C:\PRJCTS_6_7.OBJ(C:\prjcts_6_7.asm) : error L2029: 'second' : unresolved external
LINK returned error code 2.
Creating browser database...
2_6.EXE - 3 error(s), 0 warning(s)
所以它看到我的 .obj
,明白它是什么,但无法弄清楚从 C 代码中获取变量?我不想使用内联汇编程序,但我之前尝试过,而且有效。
简单猜测,这将是 C
名称修改。 C 中的 extern 往往会在前面加上 _
EXTRN _first:WORD, _second:WORD, _third:WORD
非常感谢! 也许代码是针对 Microsoft C 或类似的东西,而不是 VC++ 1.0
此代码有效。
.MODEL MEDIUM
EXTRN _first:WORD, _second:WORD, _third:WORD
.CODE
_Add_Ext PROC FAR
mov AX, _first
add AX, _second
mov _third, AX
_Add_Ext ENDP
END