我的印象是我的C编译器支持C11,因为它接受-std = c11标志,
$ cc --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
和uchar.h
是C11标准的一部分,所以我希望这个程序能够编译,
$ cat /tmp/esc.c
#include <uchar.h>
int main(void) {}
但是
$ cc /tmp/esc.c
/tmp/esc.c:1:10: fatal error: 'uchar.h' file not found
#include <uchar.h>
^
1 error generated.
我尝试找到uchar.h文件,但我系统上的唯一点击是来自iPhone SDK的奇怪,
$ locate uchar.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/usr/include/unicode/uchar.h
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/include/unicode/uchar.h
如何在OS X 10.9上使用uchar.h
?我是否必须下载新的编译器,或者我是否滥用了我的编译器?
答案 0 :(得分:2)
Apple的macOS(直到和包括Catalina 10.15在内)都没有<uchar.h>
和<threads.h>
。它没有<uchar.h>
中声明的4个函数或使用char16_t
或char32_t
的任何其他函数。
移植到需要这些功能的Mac的代码必须重写以避免使用它们(至少在macOS上使用),或者由有条件地编译的代码提供支持,以提供在macOS上所需的功能。
答案 1 :(得分:-1)
试试这个:
cc -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/include -L/usr/lib -L/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/lib -licucore /tmp/esc.c
如果它不起作用,我建议您安装“Unicode的国际组件”:
1) Install Macports for OS X
2) Run this in Terminall app: "port install icu"
它为您提供了Unicode所需的所有组件,包括“/opt/local/include/unicode/uchar.h”
然后为cc:
找到合适的选项/opt/local/bin/icu-config --cppflags-searchpath --ldflags --ldflags-icuio
这给了你:
-I/opt/local/include -L/opt/local/lib -licui18n -licuuc -licudata -licuio
所以你将程序编译为:
cc -I/opt/local/include -L/opt/local/lib -licui18n -licuuc -licudata -licuio /tmp/esc.c
我不确定,但可能从它的网站获取icu也可能适合你: