将 FFTW3 库链接到原生 Android Studio 项目

Linking FFTW3 library to native Android Studio project

提问人:terdev 提问时间:11/2/2023 最后编辑:terdev 更新时间:11/12/2023 访问量:36

问:

我想将我从源代码构建的静态 fftw3 库链接到我的原生 Android Studio 应用程序。因此,我包含了标头并将(Mach-O 64 位对象 arm64)添加到我的文件夹中。我将库与 CMake 链接:libfftw3.ajniLibs/arm64-v8a/

set(VENDOR_LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../jniLibs/arm64-v8a)

add_library(fftw STATIC IMPORTED)
set_target_properties( fftw PROPERTIES IMPORTED_LOCATION ${VENDOR_LIB_DIR}/libfftw3.a )
target_link_libraries( exec fftw )

在我的中,我添加了以下 C++ 标志:build.gradle

defaultConfig {
    applicationId "com.example.demo"
    minSdk 33
    targetSdk 33
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    externalNativeBuild {
        cmake {
            arguments "-DCMAKE_TOOLCHAIN_FILE=/Users/username/Library/Android/sdk/ndk/25.2.9519653/build/cmake/android.toolchain.cmake",
                      "-DANDROID_PLATFORM=33",
                      "-DAPP_PLATFORM=33",
                      "-DANDROID_ABI=arm64-v8a"
            cppFlags "-L/Users/username/AndroidStudioProjects/demo/app/src/main/cpp/fftw-3.3.10/.libs/ -lfftw3 -lm "
        }
    }
    ndk {
        abiFilters 'arm64-v8a'

    }
}

但是,在我的 exec 中包含库后,只要我想调用相关函数,就会收到以下错误。我知道该应用程序没有正确链接到库,但我不知道它有什么问题,因为我可以通过这种方式成功链接其他第三方库。#include "fftw-3.3.10/api/fftw3.h"ld: error: undefined symbol: fftw_malloc

android-studio 链接器错误 fftw

评论


答:

0赞 terdev 11/12/2023 #1

我可以通过将 FFTW3 作为子目录来解决这个问题:

add_subdirectory(fftw-3.3.10)
include_directories(fftw-3.3.10/api)

然后将其直接链接到可执行文件,而不将其添加为静态库:

target_link_libraries( exec fftw3 )