首页 / 更多教程 / 未使用汇编程序的外部符号C.
未使用汇编程序的外部符号C.
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了未使用汇编程序的外部符号C.,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2422字,纯文字阅读大概需要4分钟。
内容图文
我试图在汇编程序中使用它在C中使用它.我的问题是我无法编译我的代码.我正在使用Visual Studio 2012.我在构建custiomization中添加masm所以我不知道什么是错的.
C:
#include <stdio.h>
int szukaj_max (int a, int b, int c);
int main()
{
int x, y, z, wynik;
printf("\nProsz?poda?trzy liczby ca?kowite: ");
scanf_s("%d %d %d", &x, &y, &z, 32);
wynik = szukaj_max(x, y, z);
printf("\nSpo?ród podanych liczb %d, %d, %d, \ liczba %d jest najwi?ksza\n", x,y,z, wynik);
return 0;
部件:
.686
.model flat
public _szukaj_max
.code
_szukaj_max PROC
push ebp ; zapisanie zawarto?ci EBP na stosie
mov ebp, esp ; kopiowanie zawarto?ci ESP do EBP
mov eax, [ebp+8] ; liczba x
cmp eax, [ebp+12] ; porownanie liczb x i y
jge x_wieksza ; skok, gdy x >= y
; przypadek x < y
mov eax, [ebp+12] ; liczba y
cmp eax, [ebp+16] ; porownanie liczb y i z
jge y_wieksza ; skok, gdy y >= z
; przypadek y < z
; zatem z jest liczb?najwieksz?
wpisz_z:
mov eax, [ebp+16] ; liczba z
zakoncz:
pop ebp
ret
x_wieksza:
cmp eax, [ebp+16] ; porownanie x i z
jge zakoncz ; skok, gdy x >= z
jmp wpisz_z
y_wieksza:
mov eax, [ebp+12] ; liczba y
jmp zakoncz
_szukaj_max ENDP
END
错误:
Error 2 error LNK2019: unresolved external symbol "int __cdecl szukaj_max(int,int,int)" (? szukaj_max@@YAHHHH@Z) referenced in function _main C:\Users\Kaczor\Desktop\Ako\4.1\4.1\Source.obj
Error 3 error LNK1120: 1 unresolved externals C:\Users\Kaczor\Desktop\Ako\4.1\4.1\Debug\4.1.exe 1
解决方法:
包含函数调用的主文件的编译器假定它是C文件,例如因为文件名以“.cpp”结尾.因此,编译器解释声明int szukaj_max(int a,int b,int c);声明一个C函数.但是,汇编程序文件定义了C函数.
主要区别在于名称修改:为C函数生成的符号名称包含有关参数的信息,主要是为了便于链接器的重载解析.因此,甚至没有寻找简单的符号_szukaj_max. (我最初对出现在错误消息中的__cdecl感到困惑,但是它定义了ABI问题,如参数传递顺序,堆栈清理职责等,而不是名称错误.)
有关“装饰名称”的更多信息,请参阅here.
解:
>规范和可移植的方法是在主文件中声明函数“extern C”:
extern“C”int szukaj_max(int a,int b,int c);
>按照编译器和链接器期望的方式命名函数.您可以手动将名称拼凑在一起,或者只是查看链接器错误:您的案例中的名称是?szukaj_max @@ YAHHHH @Z(没有前导下划线).这是不可移植的,因为其他编译器具有不同的约定. (但是MASM汇编程序可能也不是完全可移植的.)
>或者,如果您实际上是用C编程,请将主文件名的扩展名更改为“.c”,以便编译器假定所有声明的函数都是C函数(这是Ange的正确解决方案).这应该是便携式的.
内容总结
以上是互联网集市为您收集整理的未使用汇编程序的外部符号C.全部内容,希望文章能够帮你解决未使用汇编程序的外部符号C.所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。