问题
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