크로스 컴파일 - 정적 라이브러리 추가해서 크로스 컴파일 하기

박남호·2023년 3월 8일
0

static 라이브러리를 추가해서 크로스 컴파일을 해보려고한다. 먼저 Helloworld를 출력하는 static 라이브러리 파일 hello를 생성할 것이다.

크로스 컴파일을 하기 위한 CMakeLists.txt와 toolchain.arm.cmake 파일이 있고 Helloworld를 출력할 라이브러리 파일 hello.c와 hello.h 파일이 있다. (크로스 컴파일과 toolchain 관련 내용은 https://velog.io/@qkrskagh456/%ED%81%AC%EB%A1%9C%EC%8A%A4-%EC%BB%B4%ED%8C%8C%EC%9D%BC-Tool-chain 참조)
아래는 hello.c와 hello.h의 소스 코드이다.

//hello.h
void PrintHelloWorld();
//hello.c
#include <stdio.h>
void PrintHelloWorld(void)
{
        printf("Helloworld\n");
}

아래는 CMakeLists.txt의 내용이다.
add_library에 두번째 인자를 static으로 설정해야 정적 라이브러리를 생성할 수 있다. 이제 cmake를 진행해보도록한다.
$cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.arm.cmake .
위 명령어를 입력하면 cmake가 실행되고 Makefile을 생성해준다.
여기서 make를 진행하면 hello 정적 라이브러리 함수를 생성한다.
파일 목록중 libhello.a 파일이 생성된 것을 확인할 수 있다. 정적 라이브러리 파일은 .a 동적 라이브러리 파일은 .so 파일로 생성된다.

이제 라이브러리 파일을 생성했으니 실행파일에서 라이브러리 파일을 어떻게 링크해서 컴파일을하는지 보자. 지금까지 만든 hello 라이브러리 파일은 아래 이미지에 보이는 static_library 폴더에서 진행했다.

이제 라이브러리를 포함한 실행파일을 만들껀데 위에서 라이브러리를 만드는 방식과 같다. CMakeLists.txt를 toolchain으로 cmake해서 Makefile을 생성하고 make로 tapp 실행파일을 생성할 것이다. CMakeLists.txt 파일의 내용은 아래 이미지와 같다.
INCLUDE_DIRECTORIES에는 헤더 폴더를ADD_SUBDIRECTORY는 라이브러리 폴더를 적는다. 이전에 static_library 폴더에서 hello.h 헤더와 libhello.a 라이브러리 파일을 모두 만들었으므로 모두 static_library 폴더로 적으면 된다. target_link_libraries로 실행파일과 라이브러리 파일을 링크해준다. 이제 cmake를 실행한다.
$cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.arm.cmake .
정상적으로 빌드되었다면 Makefile이 생성되고 make를 하면 tapp이 생성된것을 확인할 수 있다.
이제 타겟보드에서 정상적으로 실행이 되는지 테스트 해보자.
정상적으로 Helloworld를 출력하는 것을 확인할 수 있다.

profile
NamoPark

0개의 댓글