Android

[Native C++] 2. C소스 포함시켜서 빌드하기

별빛의온기 2022. 10. 27. 00:02
반응형

 

1. 프로젝트 폴더에서 app/src/main/cpp/ 에 자신이 라이브러리로 만들고자 하는 소스파일을 넣습니다.

저같은 경우 cpp 폴더에 sample 소스파일을 넣었고, 또한 cpp폴더에 src 폴더를 만들고 src 소스파일을 넣었습니다.

2. CMakeLists.txt를 클릭하여 add_library에다가 위에 추가한 파일들과 생성할 라이브러리 이름을 입력합니다.

이 예제에서는

 

라이브러리 이름을 Sample-lib로 지정하여 변경하였으며, 1번에서 추가한 파일들인

 

sample.cpp

sample.h

src/src.c

src/src.h

 

를 입력하였습니다. 

 

또한, target_link_libraries에도 다음과 같이 위에 입력한 라이브러리 이름으로 변경합니다.

 

3. 그리고 동기화 후 build 합니다.

 

소스파일들은 빈 파일들이므로 에러가 나지 않을것입니다.

 

 

4. 소스파일에 아래 소스를 입력합니다.

 

- src.c

//src.c
#include "src.h"

int sum(int n1, int n2){
    return n1+n2;
}
 

-src.h

//src.h
#ifndef SAMPLEPROJECT_SRC_H
#define SAMPLEPROJECT_SRC_H

int sum(int n1, int n2);

#endif //SAMPLEPROJECT_SRC_H
 

-sample.cpp

//sample.c
#include <cstring>
#include "src/src.h"

char* getVersion(){
    return "sample version V1.00";
}

int getSampleSumData(int n1, int n2){
    return sum(n1,n2);
}
 

-sample.h

//sample.h
#ifndef SAMPLEPROJECT_SAMPLE_H
#define SAMPLEPROJECT_SAMPLE_H

char* getVersion();
int getSampleSumData(int n1, int n2);

#endif //SAMPLEPROJECT_SAMPLE_H
 

 

5. 동기화 후 빌드하면 Error가 발생합니다. 이유는 함수오버로딩 기능이 있는 c++에서 sum 함수가 있는 파일인 c로 접근해서 그런건데 상세한건 인터넷에 많으므로 패스하고..

다음과 같이 src.h 소스를 변경하면 됩니다.

//scr.h
#ifndef SAMPLEPROJECT_SRC_H
#define SAMPLEPROJECT_SRC_H

#ifdef __cplusplus
extern "C"
{
#endif

int sum(int n1, int n2);

#ifdef __cplusplus
}

#endif
#endif //SAMPLEPROJECT_SRC_H
 

 

그리고 빌드하면 성공합니다.

 

 

 

 

 

 

 

반응형