Ich habe eine App auf Android mit Delphi XE6 erstellt, für die C-Code erforderlich ist. Unter iOS kann ich es jedoch nicht zum Laufen bringen. Ich vermute, dass das Problem mit dem Arm- / Daumenstatus zusammenhängt, bin mir aber nicht sicher. In beiden Systemen ist es kein Problem, den C-Code von Pascal aufzurufen. Wenn der C-Code jedoch eine Pascal-Prozedur zurückruft, generiert iOS eine"bad system call (12)"
Hier ist der Pascal-Code:
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;
Und hier ist der C-Code:
extern int BackToPascal(int a,int b);
extern int testarm(int a,int b)
{
int i;
i = BackToPascal(a,b);
return i+1;
}
Auf Android kompiliere ich so (es funktioniert):
..."arm-linux-androideabi-gcc.exe" -c test.c -o test.o -O3 -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8
Auf ios:
xcrun -sdk iphoneos clang -c -arch armv7 test.c -O3 -mfpu=neon -mtune=cortex-a8 -marm -march=armv7-a -mfloat-abi=softfp
Ich vermute, dass meine Xcode-Einstellungen falsch sind, aber ich kann nicht herausfinden, warum.
Wenn ich debuggen, kommt der Fehler beim Aufruf testC
in testarm
beim Aufruf BackToPascal
(auf "bl 0x8b8390 Xgobj.BackToPascal (int, int)"). Unter Android funktioniert es einwandfrei, bl
ruft aber nicht direkt auf BackToPascal
, sondern den folgenden Code:
75A82D94 12C68FE2 add r12, pc, #18874368 ; 0x1200000
75A82D98 73CA8CE2 add r12, r12, #471040 ; 0x73000
75A82D9C 40F2BCE5 ldr pc, [r12, #576]! ; 0x240
Welche kommen rein BackToPascal