uchar.h file not found on OS X 10.9

无人久伴 提交于 2020-12-29 03:01:14

问题


I'm under the impression my C compiler supports C11 since it accepts the -std=c11 flag,

$ 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

and uchar.h is part of the C11 standard, so I'd expect this program to compile,

$ cat /tmp/esc.c 
#include <uchar.h>

int main(void) {}

But

$ cc /tmp/esc.c 
/tmp/esc.c:1:10: fatal error: 'uchar.h' file not found
#include <uchar.h>
         ^
1 error generated.

I tried locating the uchar.h file, but the only hits on my system are from iPhone SDK's weirdly,

$ 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

How can I use uchar.h on OS X 10.9? Am I going to have to download a new compiler, or am I misusing the one I have?


回答1:


Apple's macOS (up to and including Catalina 10.15) has neither <uchar.h> nor <threads.h>. It doesn't have the 4 functions declared in <uchar.h> or any other functions using char16_t or char32_t.

Code ported to a Mac that needs those facilities must either be rewritten to avoid using them (at least on macOS) or be supported by conditionally compiled code that provides the facilities it needs on macOS.




回答2:


Try this:

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

If it didn't work, I suggest that you install "International Components for Unicode":

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

It gives you all needed components for Unicode, including "/opt/local/include/unicode/uchar.h"

Then find appropriate options for cc:

/opt/local/bin/icu-config --cppflags-searchpath --ldflags --ldflags-icuio

Which gives you:

-I/opt/local/include -L/opt/local/lib -licui18n -licuuc -licudata -licuio  

So you compile your program as:

cc -I/opt/local/include -L/opt/local/lib -licui18n -licuuc -licudata -licuio /tmp/esc.c

I'm not sure, but probably getting icu from it's website might also work for you:

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



来源:https://stackoverflow.com/questions/24608832/uchar-h-file-not-found-on-os-x-10-9

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!