未找到 clang 的aligned_alloc

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

我在 Mac OS X 主机上运行以下版本的 clang:

$ clang -v
Apple LLVM version 8.1.0 (clang-802.0.42)

我有一些代码使用

aligned_alloc()
C11 函数来分配对齐的内存块。

我正在使用

-std=c11
标志编译我的二进制文件:

...
clang -g -Wall -Wextra -mavx -std=c11 -D__USE_POSIX -D__STDC_CONSTANT_MACROS -D__STDINT_MACROS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -O2 -c my_binary.c -o my_binary.o; \
clang -g -Wall -Wextra -mavx -std=c11 -D__USE_POSIX -D__STDC_CONSTANT_MACROS -D__STDINT_MACROS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE=1 -O2 my_binary.o -o my_binary -lm; \
...

我包括

stdlib.h
并添加 POSIX 标志。来自
my_binary.h

...
#ifndef _POSIX_C_SOURCE
#define _POSIX_C_SOURCE 200809L
#endif /* getline() support */

#ifndef _XOPEN_SOURCE
#define _XOPEN_SOURCE 600
#endif /* aligned_alloc() support */

#include <stdlib.h>
...

我收到以下编译警告:

my_binary.c:245:15: warning: implicit declaration of function 'aligned_alloc' is invalid in C99 [-Wimplicit-function-declaration]
s->data = aligned_alloc(32, s->n * sizeof(*s->data));

出现此错误:

Undefined symbols for architecture x86_64:
  "_aligned_alloc", referenced from:
      _bs_initialize_signal_avx in my_binary.o
      _bs_copy_signal_avx in my_binary.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [build] Error 1

我对 clang 做错了什么,导致编译忽略

std
C11 标志?

我能够在使用 gcc 5.3.0 和 glibc 2.22 的 CentOS 7 (Linux) 主机上进行无错误编译。

macos clang c11
1个回答
0
投票

aligned_alloc 的 macOS 11.1 SDK 定义指出此 API 在 macOS 10.15 之前不可用。 10.14 及更低版本将需要针对需要此函数的 C 代码的替代解决方案。

C++ 程序可以使用较新的 Clang/LLVM libc++(如 Clang 12+)并链接到该库,而不是默认到系统 libc++.1.dylib。

© www.soinside.com 2019 - 2024. All rights reserved.