본문 바로가기

운동하는 개발자/Lazarus

라자루스(프리파스칼) 로 안드로이드에 사용 될 so파일 생성 / how to make .so for android to LAZARUS(freepascal) / fpcupdeluxe 설치 - 1

728x90

Lazarus(Freepacal)를 이용하여 안드로이드 native library인 .so파일을 Cross Compile 하여 생성 해보자

1. 우선 크로스컴파일을 가능하게 해주는 fpcupdeluxe라는 프로그램을 다운받아야 한다

1-1) fpcupdeluxe다운 좌측링크를 누른 뒤 Latest release를 눌러 깃헙에서 자신의 os와 cpu에 맞는 설치파일을 다운로드받는다

 

1-2) FPC를 설치해주는데 라자루스가 이미 설치되어있다면 원하는 버전의 FPC를 선택해서 FPC Only를 누르면 해당경로에 설치된다 가장 최신버전을 이용하자

 

 

1-3) 두번째탭 cross 화면이며 필자는 이미 크로스컴파일러가 설치 되어있기에 found crosscompiler for x86_64 등의 메세지가 표출된다
여기서 좌측상단에 lazarus가 설치된 경로를 선택해 주고 OS는 android를 선택하고 필요한 Target CPU를 선택해서 Install compiler를 눌러주면된다 

※ 나중에 이야기하겠지만 x86_64, i386, arm, aarch64만 설치해도 어지간한 기기에서는 동작된다

 

 

2. 크로스컴파일이 가능하도록 Lazarus 프로젝트 설정변경

2-1) Project -> Project Options.. 선택

 

 

2-2) 좌측 Complier Options -> Config and Target 선택
우측 화면에서 Target OS에서 'Android' Target CPU Family에서 기기에 맞는 CPU선택
(다양한 기기에 지원되어야하므로 계속 바꿔가며 빌드해 주어야한다, 자동화하려면 배치파일을 이용해 보자)

arm 32bit(v7)의 경우 cpu family : 'arm'
arm 64bit(v8)의 경우 cpu family : 'aarch62'
x86 32bit(v8)의 경우 cpu family : 'i386'
x86 32bit(v8)의 경우 cpu family : 'x86_64'

더보기

TMI.

2021/01 현재 기준으로 국내에서 사용되는 대부분의 모바일 기기는 인텔과 ARM시리즈이며 
32비트 cpu는 출시된지 상당히 오래된 폰이 아닌 이상 찾기 힘들다 (최소 5년이상)
필자는 4년전 폰인 겔럭시8이 있는데 이것도 64비트다
그리고 기업종류도 일부 테블릿을 제외하곤 거의 ARM제품이다

 

3. 소스코드 작성

library testlib;

uses
	jni, classes; 

function test(PEnv: PJNIEnv; Obj: JObject; nNum1: JInt; nNum2 : JInt): JInt; cdecl;
begin
 Result := nNum1 + nNum2;
end;

exports
	test name 'Java_kr_co_test_jnicall_testfun';

begin
end.

exports 되는 이름은 자신의 앱 패키지 구조를 따르는것이 좋다

예를들어 java.kr.co.test.jnicall.java 파일에서 해당 라이브러리를 호출하려고한다면

test name 'Java_Kr_co_test_jnicall_test'; 

이렇게 이름지어준다

※참고사이트 : www.freepascal.org/docs-html/prog/progse55.html


2부에선 자바에서 어떻게 해줘야하는지 작성하도록하겠습니다

틀린내용이나 질문은 댓글부탁드립니다

728x90