Peugeot OBD app 만들기 도전

<2단계> Flutter, Dart 예제- dart:ffi 사용한 C 상호 운용 예제(2)

peugeotory 2024. 1. 11. 12:48

Flutter_blue_plus 라이브러리내 example 소스 코드 분석을 바로 하고 싶었는데, 외계어 수준이라 포기하고..

 

1)우선 "flutter 어플리케이션 만들어 보기"를 먼저 따라해서 대략 감을 익혔습니다.

(참조) https://codelabs.developers.google.com/codelabs/flutter-codelab-first?hl=ko#0

 

 

2)다음으로 진행한 것은 Dart 예제를 모두 돌려보는 것입니다. 

https://dartpad.dev/?id=e75b493dae1287757c5e1d77a0dc73f1  ← DartPad

https://dart-ko.dev/codelabs  ← dart codelab

https://github.com/lkmandy/dart_practice  ← dart 연습 코드

 

 

3) 이것 외에 추가로 학습한 내용은 ffi에 대한 것이며,

https://blog.naver.com/chandong83/222115435054  ← flutter에서 C++ 사용하기

C interop using dart:ffi ← https://dart.dev/interop/c-interop

 

새롭게 알게된 사실은..

 

1) 연산이 많은 경우, c++ 코드를 라이브러리화 해서 함수를 가져다 쓰는게 유리하고,

2) 문자열을 반환하는 처리함수는 dart나 C++이나 성능이 비슷 : 이는 문자열을 반환하는 함수는 메모리 접근과

    연산이 많이 않기 때문이라고 합니다.

 

dart:ffi를 사용한 C 상호 운용성  →  아래 4가지 예제를 돌려보고 학습

 

  Example             Description

1.hello_world   :     인수나 반환 값 없이 C 함수를 호출하는 방법.

2.primitives     :     인수가 있고 int 또는 포인터 인 반환 값이 있는 C 함수를 호출하는 방법 .

3.structs         :      구조체를 사용하여 C와 문자열을 전달하고 단순하고 복잡한 C 구조를 처리하는 방법 

4.sqlite           :      mini tutorial과 함께 제공되는 Dart SDK 저장소의 예입니다.

 

정말이지 인내력 한계 시험하는 시간이였지만, 나름 새로운걸 배우는 것이라  즐겁게 학습했습니다.

 

Mac mini(M1)에서 실행시 빌드 에러가 발생하는데, 찾아봐도 설명 자료가 없습니다.

하여, "hello_world" 예제를 빌드 할 수 있는 방법 정리했습니다.

 

 

우선, 위의 설명처럼 1),2) 실행해서 arm64와 일치하는지 확인후, (2)동적 라이브러리 구축하기의 (기존)make 명령 --> (변경)make arm64로 입력해야 합니다. 만약, "No rule to make target 'arm64'. stop."에러가 나오는 경우, 해결책은 위의 자료 참조하여 Makefile 열고 rule 추가해주면 빌드가 될 것입니다.

 


<다음편에 계속...>