uchar.h 文件在 OS X 10.9 上找不到

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

我的印象是我的 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
?我是否需要下载一个新的编译器,或者我是否滥用了现有的编译器?

c clang c11
2个回答
4
投票

Apple 的 macOS(直到并包括 Ventura 13.3)既没有

<uchar.h>
也没有
<threads.h>
。它没有
<uchar.h>
中声明的 4 个函数或任何其他使用
char16_t
char32_t
的函数。

移植到需要这些功能的 Mac 的代码必须重写以避免使用它们(至少在 macOS 上),或者由提供 macOS 所需功能的条件编译代码支持。


-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

如果还是不行,我建议你安装“International Components for Unicode”:

1) Install Macports for OS X
2) Run this in Terminall app: "port install icu"

它为您提供 Unicode 所需的所有组件,包括“/opt/local/include/unicode/uchar.h”

然后找到合适的抄送选项:

/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 也可能对你有用:

http://site.icu-project.org/download

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