将 FFTW3 库链接到本机 Android Studio 项目

问题描述 投票:0回答:1

我想将从源代码构建的静态 fftw3 库链接到我的本机 Android Studio 应用程序。因此,我包含了标头并将

libfftw3.a
(Mach-O 64 位对象 arm64)添加到我的
jniLibs/arm64-v8a/
文件夹中。我将库与 CMake 链接起来:

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 )

在我的

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

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'

    }
}

但是,在使用

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

android android-studio linker-errors fftw
1个回答
0
投票

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

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

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

target_link_libraries( exec fftw3 )
© www.soinside.com 2019 - 2024. All rights reserved.