我在Android上使用Delphi XE6需要C代码构建了一个应用程序。但是在iOS上我不能使它工作。我怀疑问题是与手臂/拇指状态有关,但我不知道。在任何一个系统中都没有问题从Pascal调用C代码。但是如果C代码调用一个Pascal过程,iOS生成一个“坏的系统调用(12)”
这里是pascal代码:
function testarm(a,b:integer):integer; cdecl; external "testC.o"; Procedure testC; Begin testarm(1,2); end; function BackToPascal(a,b:integer): integer; cdecl; Begin result := a+b; end; ...... exports BackToPascal;
这里是C代码:
extern int BackToPascal(int a,int b); extern int testarm(int a,int b) { int i; i = BackToPascal(a,b); return i+1; }
在android这是我如何编译(它是工作):
..."arm-linux-androideabi-gcc.exe" -c test.c -o test.o -O3 -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8
在ios:
xcrun -sdk iphoneos clang -c -arch armv7 test.c -O3 -mfpu=neon -mtune=cortex-a8 -marm -march=armv7-a -mfloat-abi=softfp
我怀疑我的xcode设置是错误的,但我不知道为什么。
当我调试,当调用BackToPascal(在“bl 0x8b8390 Xgobj.BackToPascal(int,int)”)时调用testC“test错误。在Android它的工作完美,但“bl”不直接调用“BackToPascal”,而是下面的代码:
75A82D94 12C68FE2 add r12,pc,#18874368 ; 0x1200000 75A82D98 73CA8CE2 add r12,r12,#471040 ; 0x73000 75A82D9C 40F2BCE5 ldr pc,[r12,#576]! ; 0x240
其中进入BackToPascal