c++ Android ndk-build错误:未定义符号:对齐分配

js4nwp54  于 2023-05-02  发布在  Android
关注(0)|答案(2)|浏览(230)

我正在尝试生成共享对象(。ImageMagick库的文件。但是,由于以下错误,它在创建 * 时卡住了。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操作链接,我在那里生成了一个 。so 文件,并用于面对错误以便于再现问题。
https://github.com/malaythecool/Android-ImageMagick7/runs/2316777388?check_suite_focus=true

6uxekuva

6uxekuva1#

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

由于aligned_alloc()是在C++17中引入的,因此尝试将标志-std=c++1z添加到构建配置中。
这似乎是 * 应用程序。mk* 文件已经在这里设置了-std=c++17。您也可以尝试添加以下标志:

APP_CONLYFLAGS += -std=c11

以确保C标准更新为C11,其中引入了alloc_aligned()

e5njpo68

e5njpo682#

如果其他人也面临这个问题,请在 * 构建中将minSdkVersion提升到28。gradle* 文件。
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 */

相关问题