서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.

안드로이드 소스를 컴파일 해서

libcrypto.so, libssl.so 을 이용해서

 

testssl.so 를 만들었습니다.

 

그리고 안드로이드 프로젝트를 만들고 libs 폴더안에 복사하였습니다.

애뮬레이터로 빌드하고 실행 하면 아래와 같은 에러가 발생합니다.

Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/test/tcp/socket;

...

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libcrypto: findLibrary returned null

 

로드 중 에러 입니다.

뭐가 문제인지 확인 좀 부탁드립니다.

 

감사합니다.

 


더페이퍼

2012.10.18 19:14:32
*.171.36.254

hellojni 프로젝트를 하나 만들어서 .so를 만들고 이 놈을 새로 만든 프로젝트 testndk에 적용해보니

위와 같은에러가 발생합니다.

그래서 hellojni와 같은 package 이름으로 변경 후 테스트를 하니 정상적으로 잘 되는군요

 

그렇다면 android full source 중에서 openssl 만 가저다 쓰고 싶은데 어떻게 빌드를 해야 하는건지요?

같은 이름의 프로젝트를 만들고 그 곳에 JNI 폴더에 openssl 을 옮겨 놓고 ndk build를 해야 하는지요?

 

전호철

2012.10.18 23:11:02
*.200.239.210

라이브러리 로딩하다가 에러가 발생하는 것입니다.

원인은 몇가지가 있을 수 있는데


라이브러리 이름 또는 경로가 잘못되어 있는 경우가 가장 많습니다.

이 문제가 아니라면 JAVA와 Native를 연결하는 JNI 부분에 실수가 있을 가능성이 있구요.,



openssl 을 사용하는 방법은 안드로이드 wpa_supplicant 쪽에서 사용하는 것과 같은 방식으로 연결하시면 될것 같네요.

더페이퍼

2012.10.19 02:04:12
*.171.36.254

제가 적용한 방법을 설명 드리겠습니다. 어느 부분이 잘 못되었는지 체크 해 주시면 감사하겠습니다.

 

우분투에서 안드로이드 전체 소스를 ndk-build 하면 openssl에 관련파일  libcrypto.so, libssl.so 이렇게 2가지 파일이

생성됩니다. 아래와같은 방법으로 적용 합니다.

1. 같은 이을의 프로젝트를 두개 생성

2. 첫번째 프로젝트에 libcrypto.so, libssl.so 두 파일을 libs 폴더에 넣는다.

3. 실제 적용 할 프로젝트에 맞게 중간 역할을 할 so 파일을 만들기 위해 JNI 폴더안에 *.c 파일 및 Android.mk 를 생성

4. ndk-build 해서 libtestssl.so 생성

5. 또 다른 같은 이름을 가진 실제 프로젝트에 libs 폴더를 생성하고  libcrypto.so, libssl.so, libtestssl.so 넣는다.

6. static{
        System.loadLibrary("libcrypto.so");

        System.loadLibrary("libssl.so");

        System.loadLibrary("libtestssl.so");
    }

    기타 필요한 코드를 작성

7. 이렇게 해서 빌드를 하면  System.loadLibrary("libcrypto.so"); 여기서 부터 에러가 발생 합니다.

전호철

2012.10.19 21:12:40
*.200.239.210

로그를 앞뒤로 더 보여주시면 좋을것 같습니다.


시스템라이브러리와 이름이 중복되어서 그럴수도 있을것 같지만. 

최근버전부터는 어플리케이션 디렉토리부터 찾도록 바뀐거 같아서 이문제도 아닌것 같기도 하고요....




더페이퍼

2012.10.20 01:18:04
*.171.36.254

답변 감사 드립니다.

 

생각보다 어렵군요 ㅜㅜ

글로 설명하기가 힘들어서요 테스트 중인 소스 코드를 첨부해 드립니다.

 

android full source build 환경

: 우분투 12, jdk6, eclipse juno, ndk 8

 

방법 설명:

1. 우분투에서 android full source를 책에 있는 방법대로 전체 빌드함.

2. 빌드 후 생성된 libcypto.so, libssl.so를 윈도우로 옮겨 프로젝트에 적용 함.

 

첨부한 프로젝트에서 테스트 중입니다.

 

Android.mk 파일에 libssl.so, libcrypto.so를 지정 해 두었고

"com_test_ssl_mySSL.c" 파일에  include "penssl/ssl.h" 적용 했는데요

ndk-build 하면 ssl관련 함수를 못 찾아서 에러가 납니다.

 

그리고 ssl 관련 함수를 일단 모두 주석 처리하고 ndk-build해서

libmySSL.so를 만들어서 프로젝트에 로드해서 실행하면 에러가 납니다.

에러 내용을 "ndk_log.txt" 파일로 만들어 두었습니다.

 

행복한 주말 보내세요*^^*

 

첨부

더페이퍼

2012.10.23 17:10:50
*.171.36.254

 libssl.so, libcrypto.so 로드시 에러 나는 이유를 찾았네요.

System.loadLibrary("ssl.so") 할때 앞의 "lib"는 붙이는게 아니군요 ㅜㅜ

구글링하다가 알았네요 ㅜㅜ

 

로드문제는 해결 했지만, ssl 내에 있는 함수를 사용하는 문제는 아직 해결 못하고 있네요ㅜㅜ

감기 조심하세요

전호철

2012.10.23 20:48:11
*.200.239.210

홀.!! 책에 쓴거 같은데. 

아무튼 해결되셔서 다행입니다.

더페이퍼

2012.10.23 22:05:21
*.171.36.254

네 책에서도 확인했습니다.

lib가 붙는다는 글에 당연히 붙여야겠거니 생각한 제 잘 못입니다.

 

계속 문제가 되는 부분이 ssl.so 에 있는 함수를 호출하면 해당 함수가 없다고 나오는데요

이 부분을 좀 알려 주시면 감사 하겠습니다.

 위의 첨부된 소스를 한번 봐 주시면 감사하겠습니다.

 

더페이퍼

2012.10.24 17:39:42
*.171.36.254

아 드디어 성공했습니다.

어찌어찌 하다 됐어요!

makefile 에서 재대로 해더파일과 라이브러리

설정이 안돼었던 모양입니다.

 

ssl 함수 인식도 잘되고 이제 래핑함수만 재대로 만들면 될것 같아요

감사합니다.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort

repo 설정 시에 문제가 발생합니다. [5]

  • 죽유
  • 2012-12-19
  • 조회 수 5253

NDK 개발 환경 설정하기에서 문제입니다. file [2]

surfaceflinger에서 화면을 dump뜨는 메카니즘에 대해서...

GPIO 컨트롤 하기 예제 중 insmod에 관하여 문의드립니다. [2]

정오표 정리 제안 [4]

안드로이드 소스 컴파일 시에 문제가 발생합니다. [10]

  • 죽유
  • 2012-12-20
  • 조회 수 5014

SDL 예제관련 에러 질문입니다. [1]

  • 민민
  • 2012-12-25
  • 조회 수 5011

ffmpeg & hoffplay 에러 [5]

동영상 파일을 열때 avformat_open_input문 사용문의 [2]

hoffplay 빌드시 sec_format.h / SEC_OMX_Def.h 없다고 나옵니다. [3]

3rd party app에서 프레임워크 수정된 걸 적용시키려면 어떻게 해야... [3]

ffmpeg HOPLAY [3]

ffmpeg 빌드에러 [2]

GetMethodID와 GetStaticMethodID [2]

NDK에서 Surface 질문드립니다. [3]

개발 환경 구축하는데 몇가지 질문 사항이 있습니다. [3]

  • 죽유
  • 2012-12-15
  • 조회 수 4607

SSL_ERROR_SYSCALL 에러 질문드립니다..

NDK 소스 빌드 질문 드립니다. [2]

79쪽 예제 말이에요 ㅠㅠ [1]

Error 질문 드립니다. [9]

사용자 로그인