由于项目需要,将几个函数用ARM汇编代码实现,然后在C代码中调用。
[1] 我将DrawFunc.asm加入到工程中:
AREA |.text|, CODE, ARM
EXPORT DrawLine
EXPORT DrawRound
DrawLine PROC
nop
mov R1, #5
nop
ENDP
DrawRound PROC
nop
mov R1, #10
nop
ENDP
END
[2] 在该文件的Settings-->Custom Build中设置了汇编编译命令:
Commands: armasm -cpu xscale "$(InputPath)" "$(IntDir)/$(InputName).obj" -list "$(IntDir)/$(InputName).lst";
Outputs: $(IntDir)/$(InputName).obj
[3] 然后在.cpp文件中调用该函数:
extern void __stdcall DrawLine();
extern void __stdcall DrawRound();
......
DrawLine();
DrawRound();
......
[4] 编译该工程,结果出现Link错误:
error LNK2019: unresolved external symbol "DrawRound(void)"
error LNK2019: unresolved external symbol "DrawLine(void)"
在ARMV4Rel目录下也确实生成了DrawFunc.obj文件,但不知道为什么
会Link错误。即使在工程的Settings-->Link-->Object/Library Modules中加入DrawFunc.obj目标文件编译,还是出现该问题;
[5] 如果我将另外一个C++工程中生成的.obj加入本工程,则可以调用.obj中的函数;
DLL可以啊
不同语言写的code之间调用利用DLL
估计是调用规范不同的关系。我在.c文件中调用asm实现的函数只要先定义 extern void xxx();就可以。不过在.cpp文件中调用,应该声明形式如下: extern "C" void xxx();