首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android连接C模块与C++应用程序

Android连接C模块与C++应用程序
EN

Stack Overflow用户
提问于 2013-07-30 11:53:06
回答 1查看 970关注 0票数 0

这是我的完整Android.mk文件,当我试图构建这个文件时,我会遇到一个链接器问题(请参阅下面)

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)

#
# Opus - low-latency audio codec
#

include $(CLEAR_VARS)
LOCAL_DIR := opus-1.0.3
LOCAL_MODULE := opus

LOCAL_CELT_SOURCES :=   \
    $(LOCAL_DIR)/celt/bands.c \
    ...

LOCAL_SILK_SOURCES :=   \
    $(LOCAL_DIR)/silk/CNG.c \
    ...

LOCAL_SILK_SOURCES_FIXED := \
    $(LOCAL_DIR)/silk/fixed/LTP_analysis_filter_FIX.c \
    ...

LOCAL_SILK_SOURCES_FLOAT := \
    $(LOCAL_DIR)/silk/float/apply_sine_window_FLP.c \
    ...

LOCAL_OPUS_SOURCES := \
    $(LOCAL_DIR)/src/opus.c \
    ...

LOCAL_CFLAGS := -DNONTHREADSAFE_PSEUDOSTACK

LOCAL_C_INCLUDES := \
    $(LOCAL_DIR)/include \
    $(LOCAL_DIR)/celt \
    $(LOCAL_DIR)/silk \
    $(LOCAL_DIR)/silk/fixed \
    $(LOCAL_DIR)/silk/float

LOCAL_SRC_FILES := $(LOCAL_CELT_SOURCES) \
    $(LOCAL_SILK_SOURCES) \
    $(LOCAL_SILK_SOURCES_FIXED) \
    $(LOCAL_SILK_SOURCES_FLOAT)

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_DIR)/include

include $(BUILD_STATIC_LIBRARY)

################

include $(CLEAR_VARS)

LOCAL_MODULE    := audio-client-jni

LOCAL_SRC_FILES := audio-client-jni.cpp

# low latency codec
LOCAL_STATIC_LIBRARIES += opus

# for native audio
LOCAL_LDLIBS    += -lOpenSLES

# for logging
LOCAL_LDLIBS    += -llog

# for native asset manager
LOCAL_LDLIBS    += -landroid

include $(BUILD_SHARED_LIBRARY)

为了排除opus的构建方式存在问题,我使用了一个不同的构建系统(称为冻土带)来完成完全相同的工作,并且它在使用MSVC++的Windows上非常复杂。

下面是链接器命令和错误(为了提高可读性,我格式化了命令行)

代码语言:javascript
复制
C:/Projects/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++
    -Wl,-soname,libaudio-client-jni.so 
    -shared
    --sysroot=C:/Projects/android-ndk-r8e/platforms/android-14/arch-arm
    C:/Projects/workspace/AudioClient//obj/local/armeabi/objs/audio-client-jni/audio-client-jni.o
    C:/Projects/workspace/AudioClient//obj/local/armeabi/libopus.a
    C:/Projects/workspace/AudioClient//obj/local/armeabi/libstdc++.a
    -lgcc
    -no-canonical-prefixes
    -Wl,--no-undefined
    -Wl,-z,noexecstack
    -Wl,-z,relro
    -Wl,-z,now
    -LC:/Projects/android-ndk-r8e/platforms/android-14/arch-arm/usr/lib
    -lOpenSLES
    -llog
    -landroid
    -lstdc++
    -lc
    -lm
    -o C:/Projects/workspace/AudioClient//obj/local/armeabi/libaudio-client-jni.so

错误跟随

代码语言:javascript
复制
C:/Projects/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: C:/Projects/workspace/AudioClient//obj/local/armeabi/objs/audio-client-jni/audio-client-jni.o: in function (anonymous namespace)::AuClient::ReceiveThenEnqueue():C:/Projects/workspace/AudioClient//jni/audio-client-jni.cpp:419: error: undefined reference to 'opus_decode'
C:/Projects/android-ndk-r8e/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: C:/Projects/workspace/AudioClient//obj/local/armeabi/objs/audio-client-jni/audio-client-jni.o: in function InitializeThread:C:/Projects/workspace/AudioClient//jni/audio-client-jni.cpp:387: error: undefined reference to 'opus_decoder_create'

我需要第二双眼睛来观察这个问题,它明确地在audio-client-jni.o之前链接libopus.a,但如果这是我不知道如何修改makefile以获得所需结果的问题。当包含在C++应用程序中时,opus.hAPI是用extern "C“定义的。到目前为止还没有运气。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-31 09:10:22

感谢@AlexCohn的协助,显然没有任何问题,相反,所有的源文件都没有适当地包括,轻微忽视了我的部分。

在我的例子中,我不确定应该如何设置东西才能运行bin util命令,幸运的是,它非常简单:

代码语言:javascript
复制
"C:\Projects\android-ndk-r8e\toolchains\arm-linux-androideabi-4.6\prebuilt\windows-x86_64\bin\arm-linux-androideabi-nm.exe" "C:\Projects\workspace\AudioClient\obj\local\armeabi\libopus.a"

我只是从预先构建的工具链中挑选了一些看似合理的东西。

有了nm的输出,我可以验证出口是否在那里。经过仔细检查后,我发现我忘了把$(LOCAL_OPUS_SOURCES)包括在我的LOCAL_C_INCLUDES中。解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17946318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档