4.0.3 level 15 입니다...
libpcap는 최신 버전은 1.2.1 입니다..
윈도우 환경이기 때문에 cygwin 으로 했어요!
다음과 같은 에러가 나는데.. 미칠 것만 같아요 ㅠ_ㅜ 도와주세요.. 흑흑
이렇게 구성 하였습니다...
저의 생각으로는 Android.mk파일이 잘못 되었는지.. libpcap-native.c 에서 include 해야 하는 헤더 파일들을 읽어 오지 못하는 것 같아요..
왜냐면 pcacplookupdev라는 메쏘드는 pcacp.h 에 분명 선언 되어 있는걸 확인 했고, libpcap-native.c 에도 include 해놨는데.... ㅠ_ㅜ
밑에 저의 Android.mk와 libpcap-native.c 와 .java 파일 그리고 libpcap-ntive.c의 원형 .h 파일 함께 올립니다아...
LOCAL_PATH :=./jni
include $(CLEAR_VARS)
LOCAL_MODULE := pcaptest
LOCAL_SRC_FILES := libpcap-native.c
LOCAL_C_INCLUDES :=$(LOCAL_PATH)/libpcap
LOCAL_STATIC_LIBRARIES := libpcap
LOCAL_LDLIBS := -ldl -llog
include $(BUILD_SHARED_LIBRARY)
include $(LOCAL_PATH)/libpcap/Android.mk
-------------------------------------------------------------------libpcap-native.c
#include <jni.h>
#include <string.h>
#include <android/log.h>
#include <pcap.h>
#define DEBUG_TAG "Sample_LIBPCAP_DEBUGGING"
void Java_org_umit_android_libpcaptest_libpcaptest_testLog(JNIEnv *env, jclass clazz, jstring message)
{
char errbuf[1024];
errbuf[0] = '\0';
char *szLogThis;
char *dev = pcap_lookupdev(errbuf);
if (dev == NULL) {
szLogThis = "Couldn't find default device";
}
else szLogThis = dev;
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "Device status: [%s]", szLogThis);
__android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "errbuf [%s]", errbuf);
(*env)->ReleaseStringUTFChars(env, message, szLogThis);
}
----------------------------------------------.java
package org.umit.android.libpcaptest;
import android.app.Activity;
import android.os.Bundle;
public class libpcaptest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
static{
System.loadLibrary("pcaptest");
}
private native void testLog(String logThis);
}
--------------------------------------------------------------------------원형.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_umit_android_libpcaptest_libpcaptest */
#ifndef _Included_org_umit_android_libpcaptest_libpcaptest
#define _Included_org_umit_android_libpcaptest_libpcaptest
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_umit_android_libpcaptest_libpcaptest
* Method: testLog
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_org_umit_android_libpcaptest_libpcaptest_testLog
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
와!! 답변 정말 감사합니다ㅠ_ㅜ 제가 안드로이드 초보라서요 ㅠ_ㅜ 제가 참고한 책들(인사이드 안드로이드, 전문가로 가는 안드로이드프로젝트 등등) 에는 .a 에 대한 언급이 전혀 없어서ㅠ_ㅜ 혹 있었는데 지나 쳐 갓는지도.. .o 한다음에 .a 로 가는 것 맞는지요~??
libpcap.c 의 .o 파일을 만들고자 위와 같은 명령어를 쳤는데.. 또 오류가 나요 ㅠ_ㅜ
아예 헤더 파일들을 참조 하지 못하는 것 같은데 잘 모르겠어요 ㅠ_ㅜ 흑흑
mk 파일에 include $(BUILD_SHARED_LIBRARY) 로 하면 .so 파일 형식이되고
include $(BUILD_STATIC_LIBRARY) 로 하면 .a 형식으로 빌드 됩니다. 각각
STATIC. SHARED 형식으로 빌드 하라는 의미죠.
첨부하신 mk파일에 LOCAL_STATIC_LIBRARIES := libpcap 이라 있으니 libpcap.a 참조하라는 의미인데.
libpcap.a 파일이 없다면 libpcap 쪽 소스가 빌드가 안된 겁니다.
libpcap 쪽 소스를 마찬가지로 NDK 빌드하면 libpcap.a 나 libpcap.so 생깁니다.
libpcap.a 가 생겼다면 코드대로 그냥 사용하면 되고
libpcap.so가 생겼다면
LOCAL_LDLIBS := -ldl -llog
LOCAL_LDLIBS += -L (해당 파일이 있는 경로) -lpcap
형식으로 링크하라고 mk 파일을 고쳐주시면 됩니다.
링크 단계에서 pcap_lookupdev가 없다고 오류가 나는듯 한데. libpcap.a 파일은 빌드 된건가요?