【发布时间】:2021-04-11 12:11:53
【问题描述】:
我正在尝试为 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.
我对 c++ 有非常基本的了解,如果我遗漏了什么,欢迎提出任何建议。 这是 GitHub Actions 链接,我在其中生成 .so 文件并面临错误,以便于重现问题。
https://github.com/malaythecool/Android-ImageMagick7/runs/2316777388?check_suite_focus=true
【问题讨论】:
-
1.你知道哪个库提供了
aligned_alloc的实现吗? 2. 你知道那个库是否链接到你最终的.so吗? -
另外,
MAGICKCORE_HAVE_STDC_ALIGNED_ALLOC是在什么基础上定义的?这就是强制选择memory.c中的实现选择aligned_alloc()路由的原因。 -
aligned_alloc 实际上是 c++ 函数en.cppreference.com/w/c/memory/aligned_alloc。此外,如果我更改与 MAGICKCORE_HAVE_STDC_ALIGNED_ALLOC 相关的代码中的任何内容,就像陷入黑暗一样
-
是的,正是我的观点。这应该可以帮助您找出可能是什么问题。
aligned_alloc()在 C 的早期版本中不存在,因此您需要检查库,即标准 C 库,它是否在您的系统上随该实现一起提供。此外,如果您检查了 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]中的警告。无论您要编译的哪个库都没有该功能。
标签: c++ android-ndk clang++