- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Link
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[JNI/NDK] 여러 폴더에 있는 라이브러리 링크하기 본문
프로젝트를 진행하다보면 여러 폴더에 나뉘어 있는 라이브러리를 링크해야 할 일이 생기는데, NDK 샘플이나 여타의 코드를 보면 전부 한 폴더에 있는 라이브러리만 링크하고 있더군요. 저나 제 주변에 NDK나 리눅스 프로그래밍에 대해서 아는 사람이 없었기 때문에 한참을 헤매고 나서야 방법을 알게 되었습니다. 엄청나게 간단한데 구글링으로도 도저히 찾을수가 없더라구요 ㅠ_ㅠ
방법은 아래처럼 LOCAL_LDLIBS 에 원하는 폴더를 모두 적어주면 됩니다.
위와 같이할 경우 한 가지 주의점은 static library 링크는 문제가 없는데 dynamic library 링크는 런타임시에 링크 에러가 발생한다는 것 입니다. dynamic library 링크는 빌드시에 단순한 정보들만을 확인하므로 실제 모듈은 별도로 로딩을 해 주어야 하기 때문이죠. ( System.loadLibrary() 메서드를 사용해서 )
실제로 라이브러리를 사용하는 프로젝트의 $(ProjectDir)/libs/armeabi 폴더는 ndk-build 를 실행하면 모두 삭제되므로, 빌드가 끝난 후 모든 dynamic library 를 $(ProjectDir)/libs/armeabi 폴더로 복사시켜 주면 됩니다. 쉘 스크립트로 자동으로 복사되게끔 하면 편리하겠죠. (제가 NDK 사용법이나 리눅스 프로그래밍에 대해서 잘 모르기 때문에 이 방법밖에 못 알아냈는데, 혹시 더 좋은 방법 아시는 분은 댓글 부탁드립니다... ^^;;)
아~ 주의할 점이 한 가지 더 있는데, cygwin 콘솔창에서 ndk-build 를 실행하셨다면 이클립스에서 애플리케이션을 실행시키기 전에 반드시 F5 키를 눌러서 프로젝트를 refresh 시켜 주셔야 합니다. refresh 를 시켜주지 않으면 라이브러리가 변경된 것을 인식하지 못 하더군요.
방법은 아래처럼 LOCAL_LDLIBS 에 원하는 폴더를 모두 적어주면 됩니다.
# libadd.so 는 LibTest1/libs/armeabi 에
# libsubtract.so 는 LibTest2/libs/armeabi 에 있다고 가정합니다.
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../../LibTest1/libs/armeabi) \
-L$(call host-path, $(LOCAL_PATH)/../../LibTest2/libs/armeabi) \
-ladd -lsubtract
# libsubtract.so 는 LibTest2/libs/armeabi 에 있다고 가정합니다.
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/../../LibTest1/libs/armeabi) \
-L$(call host-path, $(LOCAL_PATH)/../../LibTest2/libs/armeabi) \
-ladd -lsubtract
위와 같이할 경우 한 가지 주의점은 static library 링크는 문제가 없는데 dynamic library 링크는 런타임시에 링크 에러가 발생한다는 것 입니다. dynamic library 링크는 빌드시에 단순한 정보들만을 확인하므로 실제 모듈은 별도로 로딩을 해 주어야 하기 때문이죠. ( System.loadLibrary() 메서드를 사용해서 )
실제로 라이브러리를 사용하는 프로젝트의 $(ProjectDir)/libs/armeabi 폴더는 ndk-build 를 실행하면 모두 삭제되므로, 빌드가 끝난 후 모든 dynamic library 를 $(ProjectDir)/libs/armeabi 폴더로 복사시켜 주면 됩니다. 쉘 스크립트로 자동으로 복사되게끔 하면 편리하겠죠. (제가 NDK 사용법이나 리눅스 프로그래밍에 대해서 잘 모르기 때문에 이 방법밖에 못 알아냈는데, 혹시 더 좋은 방법 아시는 분은 댓글 부탁드립니다... ^^;;)
아~ 주의할 점이 한 가지 더 있는데, cygwin 콘솔창에서 ndk-build 를 실행하셨다면 이클립스에서 애플리케이션을 실행시키기 전에 반드시 F5 키를 눌러서 프로젝트를 refresh 시켜 주셔야 합니다. refresh 를 시켜주지 않으면 라이브러리가 변경된 것을 인식하지 못 하더군요.
'★─Programing > ☆─JNI | NDK' 카테고리의 다른 글
[JNI/NDK] JNI 동작원리 개념 - 1 (0) | 2016.07.19 |
---|---|
[JNI/NDK] JNI Local Reference Changes in ICS ( ICS 부터 바뀌는 JNI Local Reference ) (0) | 2016.06.03 |
[JNI/NDK] Android NDK Overview ( 안드로이드 NDK 개요 ) (0) | 2016.05.31 |
[JNI/NDK] 이미 만들어진 so 파일 링크하기 (for 안드로이드) (0) | 2016.05.25 |
[JNI/NDK] C/C++ 코드, 안드로이드 세상으로 마이그레이션 하기 (0) | 2013.06.19 |
Comments