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

책에 5장 GPIO 컨트롤 하기 소스를 가지고 테스트를 해보았는데요


ledclient/Android.mk 파일에 라이브러리(so)를 추가했습니다

-----------------ledclient/Android.mk--------------------------

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_DEFAULT_CPP_EXTENSION := cpp
LOCAL_PRELINK_MODULE:=false
LOCAL_MODULE    := libledclientjni
LOCAL_SRC_FILES := \
    ledClient.cpp \
    led.cpp
LOCAL_SHARED_LIBRARIES :=     \
    libcutils        \
    libutils        \
        libbinder               \
        libadd                            <-----------------------libadd.so 파일 라이브러리 추가
LOCAL_C_INCLUDES +=   \
                      $(JNI_H_INCLUDE)
include $(BUILD_SHARED_LIBRARY)

-------------------------------------------------------------


led.cpp파일에서 라이브러리 관련 소스를 추가작성하였습니다

---------------------------------------led.cpp---------


#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include <utils/Log.h>
#include "ledClient.h"
#include "../include/add.h"  <--------헤더추가


using namespace android;
#ifdef __cplusplus
extern "C" {
#endif
jint Java_com_example_ledtest1_MainActivity_ledfromJNI (JNIEnv * env, jobject obj, jint led) {
    int a=led;
    LED *gg = new LED;가
    gg->setN(a);
    printf("aa\n");
    test_add(1,2);  <-------------------------------libadd.so 파일 함수 실행
    return a;
}
#ifdef __cplusplus
}
#endif
-------------------------------------------------------------


이렇게만 추가후에 mm으로 정상 빌드 실행 시켜서 adb logcat에서 출력을 봤는데요

아래 출력 내용입니다


I/DEBUG   ( 1193):     bea7aac4  50133f9f  /system/lib/libc.so
I/BootReceiver( 1305): Copying /data/tombstones/tombstone_05 to DropBox (SYSTEM_TOMBSTONE)
I/ActivityManager( 1305): Process com.example.ledtest1 (pid 1901) has died.
W/NetworkManagementSocketTagger( 1305): setKernelCountSet(10046, 0) failed with errno -2
D/Zygote  ( 1196): Process 1901 terminated by signal (11)
W/ActivityManager( 1305): Force removing ActivityRecord{414ef780 com.example.ledtest1/.MainActivity}: app died, no saved state
D/dalvikvm( 1305): GC_CONCURRENT freed 121K, 12% free 11561K/13063K, paused 2ms+4ms
W/InputManagerService( 1305): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@41665e50
I/ActivityManager( 1305): No longer want com.android.contacts (pid 1573): hidden #16
W/ThrottleService( 1305): unable to find stats for iface rmnet0
D/dalvikvm( 1305): GC_CONCURRENT freed 934K, 15% free 11150K/13063K, paused 8ms+14ms


--------------------


logcat에 보면 위와 같은 에러가 나는데요 제가 라이브러리 링크를 잘못 한것인가요?

안드로이드보드에도  /system/lib/libadd.so  에 추가한 상태입니다.


libadd.so 파일은

int test_add(int a, int b)

{

  return a+b;

}

이렇게 구성된 라이브러리파일이구요 c로 작성하여 라이브러리 테스트까지 해보고 안드로이드에서 테스트한 상태입니다


공류라이브러리 링크시키면 에러나는데 원인을 모르겠네요

책 내용에 보면 외부라이브러리 활용하기부분이 있는데 정적라이브러리를 링크하여 안드로이드에 사용해야 하는것인가요?


김정권

2015.02.11 05:00:16
*.131.177.146

C++ 맹글링 문제로 보이네요.

C는 링크할 함수이름이 그대로인데,

C++은 오버로딩 때문에 컴파일함수 이름이 인자 변수형태 갯수를 변형해 붙입니다.

즉, C++에서 찾는 함수는 test_add@????? 어쩌고 저쩌고라 못 찾습니다.


add.h를 아래와 같이 편집해야 합니다. (그래야, C++이 얘는 이름을 그냥그대로 찾아야 되는구나 압니다.)

#ifdef __cplusplus
extern "C" {
#endif


int test_add(int a, int b);


#ifdef __cplusplus
}
#endif


ice179

2015.02.11 17:34:56
*.223.22.89

맹글링 문제 같지않습니다..

add.h 아래와 같이 사용중입니다.


#ifndef ADD_L_H
#define ADD_L_H
#ifdef __cplusplus
extern "C" {
#endif
int test_add(int a, int b);
#ifdef __cplusplus
}
#endif

#endif // ADD_H

전호철

2015.02.11 22:22:13
*.162.60.30

libadd.so 를 하나 더 만들어서 libledclientjni.so 에서 연결하셨다는건가요?

그럴경우 JAVA에서 연결된 라이브러리까지 모두 추가해주셔야 합니다.


 책쓴지가 하도 오래되서 확실하지 않지만 아마 책에 썼던걸로 기억을 하는데....  (빼먹었나..)

ice179

2015.02.12 07:43:02
*.127.16.63

libledclientjni.so를 만들때 libadd.so를 추가하였습니다. LOCAL_STATIC_LIBRARIES에 libadd.a 로 라이브러리를 추가하니 정상동작하고 있습니다

ice179

2015.02.12 17:42:56
*.223.26.172

좀 이상한게

LOCAL_STATIC_LIBRARIES에서 추가하니 정상동작하는데


LOCAL_SHARED_LIBRARIES 변수로 libadd를 추가하면 logcat에

Fatal signal 11 (SIGSEGV) at 0x41c179b8 (code=2)   이라고 나오는데요

shared에서 동작이 안되는 이유가 있을가요?





전호철

2015.02.13 01:13:48
*.162.60.30

java 에서 libadd 까지 로드하고 해보세요.

ice179

2015.02.13 02:18:52
*.223.26.172

Android.mk

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := eng
LOCAL_DEFAULT_CPP_EXTENSION := cpp
LOCAL_PRELINK_MODULE:=false
LOCAL_MODULE    := libledclientjni
LOCAL_SRC_FILES := \
    ledClient.cpp \
        led.cpp \
LOCAL_CFLAGS    += -Wall -g

LOCAL_STATIC_LIBRARIES :=   \
                           #libadd \   <------------- static 으로 하면 정상동작합니다.
LOCAL_SHARED_LIBRARIES :=     \
    libcutils        \
    libutils        \
        libbinder               \
        libadd                  \  <--------shared로 선언하니 에러

LOCAL_C_INCLUDES +=   \
                      $(JNI_H_INCLUDE)  \
                      $(LOCAL_PATH)/../include

include $(BUILD_SHARED_LIBRARY)
include $( call import-module, libadd )


java 에서는

static{       
        System.loadLibrary("add");
        System.loadLibrary("ledclientjni");     
        Log.d("JNI","System.loadLibrary func call");
    }

이렇게 한 상태이구요


Android.mk 에서 static으로 설정 

java에서         System.loadLibrary("add"); 주석처리 후에 빌드하면 정상동작하는데


shared설 정하고         System.loadLibrary("add"); 추가하여 실행시키면 앱이 죽어 버리는현상이 나오더라구요;;


여러가지 검색해서 해보고 있는데;; shared로 해결이 안되네요;;

전호철

2015.02.13 03:10:13
*.162.60.30

이상하네요. 그렇게 하면 원래 되야 되는데..

올려주신 에러메세지도 관련없는 데서 나오는거 같은데.


혹시라도 모르니 library 들을 앱에 포함해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수sort
103 PDK를 이용하여 안드로이드 프레임워크 so파일 참조에 관해서 질문있... [7] 김바람 2013-03-07 26815
102 예제를 따라하던 중 Android.mk 파일로 APK파일 생성 후 설치시 ... [6] 김바람 2013-03-05 12338
101 ndk 38페이지 질문_repo file [1] 제임스59 2013-08-28 12060
100 안드로이드의 모든것 분석과 포팅 교재 관련 [2] nexus26 2011-07-05 10588
99 [Linux와 Android] 001 - 임베디드 시스템에 대하여 file 고도리 2011-06-21 9496
98 다시 질문 드립니다.ㅜㅜ apk 설치문제입니다. [3] 여월광 2014-03-07 9132
97 책 관련해서 질문이 있습니다. [1] winpih 2011-07-13 9036
96 안드로이드 init의 특징에 대해 질문있습니다. [2] 얼사마 2011-07-12 9024
95 117쪽 ueventd 실행 부분.. [1] 홍순민 2011-08-30 8855
94 475페이지 그림 외 건의 사항.. [2] 장병남 2011-07-22 8635
93 [Linux와 Android] 002 - UNIX/Linux system 개요 file 고도리 2011-06-22 8626
92 [Linux와 Android] 002 - UNIX/Linux system 개요(Continue...... 고도리 2011-07-02 8573
91 p186. Gingerbread 센서 구조의 간략한 설명 요청드립니다. [3] forone 2011-08-25 8432
90 NDK를 이용한 camera 제어 예제에 대해 문의 드립니다. [7] 죽유 2013-01-11 8050
89 chapter7 안드로이드 오디오 서브시스템 에서 궁금한게 있습니다 [1] 가쓰비 2011-12-16 8017
88 개발환경 설정 중 문의사항입니다. file [1] 정바타 2011-10-14 7907
87 아래 [SDL 예제관련 에러 질문입니다.] 이어서... [3] 민민 2012-12-26 7759
86 책이 나온내용이지만 좀 다른예기일수도 잇네요 [1] 가쓰비 2011-12-21 7578
85 RGB 부분에 대해서 질문이 있습니다. [1] ys2cdh 2012-01-05 7382
84 아..권한 하고 마운트 에서 막혀버리네요..ㅜㅜ [1] 여월광 2014-03-09 7375

사용자 로그인