Android ndk-build 错误:未定义符号:aligned_alloc

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

我正在尝试为 ImageMagick 库构建共享对象 (.so) 文件。但是,在创建 .so 文件时由于以下错误而卡住:

[arm64-v8a] Executable     : magick
ld: error: undefined symbol: aligned_alloc
>>> referenced by memory.c:262 (././ImageMagick-7.0.9-17/MagickCore\memory.c:262)
>>>               memory.o:(AcquireAlignedMemory) in archive ./obj/local/arm64-v8a/libmagickcore-7.a
>>> referenced by memory.c:262 (././ImageMagick-7.0.9-17/MagickCore\memory.c:262)
>>>               memory.o:(AcquireVirtualMemory) in archive ./obj/local/arm64-v8a/libmagickcore-7.a
>>> referenced by memory.c:262 (././ImageMagick-7.0.9-17/MagickCore\memory.c:262)
>>>               memory.o:(AcquireVirtualMemory) in archive ./obj/local/arm64-v8a/libmagickcore-7.a
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [C:/hostedtoolcache/windows/ndk/r22b/x64/build//../build/core/build-binary.mk:741: obj/local/arm64-v8a/magick] Error 1
Error: Process completed with exit code 1.

这是一个 GitHub Actions 链接,我在其中生成一个 .so 文件并面对错误以便于重现问题。

https://github.com/malaythecool/Android-ImageMagick7/runs/2316777388?check_suite_focus=true

c++ android-ndk clang++
2个回答
1
投票

CI日志中,它显示:

././ImageMagick-7.0.9-17/MagickCore/memory.c:262:10: warning: implicit declaration of function 'aligned_alloc' is invalid in C99 [-Wimplicit-function-declaration]

最终在链接器中抱怨缺少符号:

ld: error: undefined symbol: aligned_alloc

尝试将标志

-std=c++1z
添加到您的构建配置中,因为
aligned_alloc()
是在 C++17 中引入的。

似乎Application.mk文件已经设置了

-std=c++17
here。您也可以尝试添加以下标志:

APP_CONLYFLAGS += -std=c11

确保C标准更新到C11,其中引入了

alloc_aligned()


0
投票

Incase 其他任何人都面临这个问题,在你的 build.gradle 中将

minSdkVersion
提高到
28

Android ndk 似乎基于

minSdkVersion
定义这些功能,即使您的 CFLAGS 中有
-std=c11

~/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/stdlib.h

#if ANDROID_API >= 28
void* aligned_alloc(size_t alignment, size_t __size) __INTRODUCED_IN(28);
#endif /* __ANDROID_API >= 28 */
© www.soinside.com 2019 - 2024. All rights reserved.