source

iOS에서의 Dellphi XE6 링크 C 코드

lovecheck 2022. 10. 20. 21:59
반응형

iOS에서의 Dellphi XE6 링크 C 코드

Delphi XE6를 사용하여 Android 상에서 C코드를 필요로 하는 앱을 만들었습니다.그러나 iOS에서는 동작하지 않습니다.암/엄지 상태에 문제가 있는 것 같습니다만, 잘 모르겠습니다.Pascal에서 C코드를 호출하는 것은 어느 시스템에서도 문제가 없습니다.그러나 C코드가 Pascal 프로시저를 호출하면 iOS가 생성하는 Pascal 프로시저는"bad system call (12)"

다음은 파스칼 코드입니다.

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 설정이 잘못된 것 같습니다만, 그 이유를 알 수 없습니다.

디버깅을 하면, 콜시에 에러가 발생한다.testCtestarm전화할 때BackToPascal(bl 0x8b8390 Xgobj).Back To Pascal (int, int)" 。안드로이드에서는 완벽하게 동작하지만bl직접 호출하지 않음BackToPascal단, 다음 코드:

75A82D94 12C68FE2         add r12, pc, #18874368 ; 0x1200000
75A82D98 73CA8CE2         add r12, r12, #471040 ; 0x73000
75A82D9C 40F2BCE5         ldr pc, [r12, #576]! ; 0x240

어느쪽이 되는가?BackToPascal

코드는 적절한 것 같고, 당신의 호출 규약 처리는 제 눈에는 완벽하게 맞습니다.

Apple의 ARM에서 스태틱 함수(타입 변환 등 백그라운드에서 발생하는)를 호출하면 스택 파손이 발생할 수 있는 잠재적인/소문 버그가 발생했을 가능성이 있다고 생각합니다.직접 실행하는 것은 아니지만 외부 함수는 구현을 포함하는 익명 정적 함수를 호출하는 stub을 통해 구현될 수 있습니다.

외부 함수를 대신 비정적 구현 함수만 호출하는 래퍼로 할 수 있습니다.

언급URL : https://stackoverflow.com/questions/25468888/delphi-xe6-link-c-code-in-ios

반응형