android - NDK 中 undefined reference 错误

标签 android c++ android-ndk undefined-reference

我正在尝试编译 unrar对于 Android 但得到一些 undefined reference error。我被困在这里几天,但找不到确切的问题。我尝试从现有的 makefile 编写 Android.mk

错误

jni/unrar/rar.cpp:104: error: undefined reference to 'CommandData::ParseCommandLine(bool, int, char**)'
jni/unrar/rar.cpp:107: error: undefined reference to 'CommandData::ReadConfig()'
jni/unrar/rar.cpp:108: error: undefined reference to 'CommandData::ParseEnvVar()'
jni/unrar/rar.cpp:110: error: undefined reference to 'CommandData::ParseCommandLine(bool, int, char**)'

安卓.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
UNRAR_PATH := $(LOCAL_PATH)/unrar
LOCAL_MODULE    := unrar-jni

LOCAL_SRC_FILES := com_unrar_jni.cpp unrar/rar.cpp unrar/strlist.cpp unrar/strfn.cpp unrar/pathfn.cpp unrar/smallfn.cpp unrar/global.cpp unrar/file.cpp unrar/filefn.cpp unrar/filcreat.cpp \
    unrar/archive.cpp unrar/arcread.cpp unrar/unicode.cpp unrar/system.cpp unrar/isnt.cpp unrar/crypt.cpp unrar/crc.cpp unrar/rawread.cpp unrar/encname.cpp \
    unrar/resource.cpp unrar/match.cpp unrar/timefn.cpp unrar/rdwrfn.cpp unrar/consio.cpp unrar/options.cpp unrar/errhnd.cpp unrar/rarvm.cpp unrar/secpassword.cpp \
    unrar/rijndael.cpp unrar/getbits.cpp unrar/sha1.cpp unrar/sha256.cpp unrar/blake2s.cpp unrar/hash.cpp unrar/extinfo.cpp unrar/extract.cpp unrar/volume.cpp \
    unrar/list.cpp unrar/find.cpp unrar/unpack.cpp unrar/headers.cpp unrar/threadpool.cpp unrar/rs16.cpp unrar/cmddata.cpp unrar/ui.cpp \
    unrar/filestr.cpp unrar/recvol.cpp unrar/rs.cpp unrar/scantree.cpp unrar/qopen.cpp 

LOCAL_CFLAGS := -O2
LOCAL_CPPFLAGS := -fexceptions -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

CommandDatacmddata.hpp 中声明,在cmddata.cpp 文件中实现。 rar.hpp 还包括cmddata.hpp 但是为什么它会提示函数未定义。

最佳答案

你找到的源代码不完整,没有官方声明编译,尤其是在Android下。但以下步骤可以帮助您入门:

  1. 打开新目录,打开该目录的命令行。
  2. mkdir jni
  3. 将问题中的 Android.mk 完全放入 jni 目录
  4. 解压 unrarsrc-5.3.6.tar.gz 到 jni/unrar
  5. jni/unrar/rar.hpp中添加一行#88:#undef _ANDROID
  6. 创建空文件jni/com_unrar_jni.cpp
  7. 运行 ndk-build APP_CFLAGS="-Dgetpass\(a\)=a"APP_STL=STLport_static c++_static 也可以工作)

关于android - NDK 中 undefined reference 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658372/

相关文章:

android - 错误日志文件?

android - GetMethodID 找不到 id - android JNI

java - 哪个编译器用于通过 ndk 移植 C++?

android - 在顶部绘制选择器 - 用于基本线性布局?

android - 更改页面后选项卡内容消失

android - 如何使用tomcat构建一个web服务然后在android ksoap2中使用它

c++ - 构造函数不会将使用 new 初始化的数组作为参数

c++ - 有没有办法获取堆上可用的内存地址范围?

C++ CreateThread() "Not responding"

android - 如何在 Android.mk 构建过程结束时运行 shell 命令?