相关疑难解决方法(0)

Android NDK:使用预编译的静态库链接

我正在尝试将Jnetpcap移植到Android,以便将其用于解析.pcap文件.Jnetpcap是libpcap的java包装器,它使用JNI.我已经使用android的源代码树将libpcap编译为静态库.

当编译Jnetpcap作为共享库时,我遇到错误,因为我必须链接libpcap.a但我不知道怎么能告诉Android.mk他必须链接到我拥有的libpcap.a文件.

使用"LOCAL_STATIC_LIBRARIES:= libpcap"将无法正常工作,因为在android NDK中默认不提供libpcap.

如果你们中的任何人能帮助我,我会非常感激.

这是我当前的Android.mk文件:

include /home/sergio/workspace/MyApp/jni/libpcap/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := jnetpcap

LOCAL_SRC_FILES :=\
    jnetpcap.cpp\
    packet_flow.cpp\
    packet_jheader.cpp\
    jnetpcap_pcap_header.cpp\
    nio_jbuffer.cpp\
    winpcap_stat_ex.cpp\
    winpcap_send_queue.cpp\
    winpcap_ext.cpp\
    jnetpcap_ids.cpp\
    jnetpcap_dumper.cpp\
    jnetpcap_utils.cpp\
    util_in_cksum.cpp\
    jnetpcap_beta.cpp\
    nio_jmemory.cpp\
    packet_jsmall_scanner.cpp\
    packet_protocol.cpp\
    nio_jnumber.cpp\
    packet_jheader_scanner.cpp\
    library.cpp\
    packet_jscan.cpp\
    jnetpcap_pcap100.cpp\
    util_checksum.cpp\
    packet_jpacket.cpp\
    winpcap_ids.cpp\
    jnetpcap_bpf.cpp

LOCAL_C_INCLUDES := /home/sergio/android-ndk-r5b/platforms/android-8/arch-arm/usr/include /home/sergio/workspace/Shark/jni/libpcap

LOCAL_STATIC_LIBRARIES := libpcap

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

linker android static-libraries android-ndk

29
推荐指数
2
解决办法
6万
查看次数

如何将预建的共享库链接到Android NDK项目?

这里我Android.mkjni/文件夹中使用了这个文件.

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# Here we give our module name and source file(s)
LOCAL_MODULE    := offlineDownload
LOCAL_SRC_FILES := offline_download.c

LOCAL_SHARED_LIBRARIES :=../lib/libpackext.so.1.0
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

lib在项目目录中创建一个文件夹并放入我的预构建.so库并生成一个Android.mk包含以下内容的文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := packext
LOCAL_SRC_FILES := libpackext.so.1.0
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include

include $(PREBUILT_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

当我使用ndk-build -B命令时,我得到了对packageExtraction的未定义引用.在这里,我使用我的预建库函数意味着我无法将我的预建共享库链接到我的offlinedownload库.

所以任何人都请帮我解决这个问题.

c android android-ndk

21
推荐指数
3
解决办法
4万
查看次数

共享库可以调用另一个共享库吗?

可以从另一个共享库中共享库加载和调用函数吗?

我有共享库libDsmTestLib.so,它使用另一个共享库libDsmShared.solibPINDsmShared.so

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE           := DsmTestLib
LOCAL_SRC_FILES        := DSM_Library.cpp

LOCAL_LDLIBS := -lDsmShared
LOCAL_LDLIBS += -lPINDsmShared

include $(BUILD_SHARED_LIBRARY)
Run Code Online (Sandbox Code Playgroud)

当我创建libDsmTestLib.so并想在我的android java应用程序中使用它时,如下所示:

package com.dsm;

import android.app.Activity;
import android.os.Bundle;

public class dsmTest extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    static {
        try {
            System.loadLibrary("DsmTestLib");
        }
        catch( UnsatisfiedLinkError e ) {
             System.err.println("Native code library failed to load.\n" + e);
        } …
Run Code Online (Sandbox Code Playgroud)

android shared

7
推荐指数
2
解决办法
2万
查看次数

标签 统计

android ×3

android-ndk ×2

c ×1

linker ×1

shared ×1

static-libraries ×1