Файл uchar.h не найден в OS X 10.9
У меня сложилось впечатление, что мой компилятор 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
Как я могу использовать uchar.h
на OS X 10.9? Я собираюсь загрузить новый компилятор, или я неправильно использую тот, который у меня есть?
1 ответ
MacOS от Apple (до Catalina 10.15 включительно) не имеет ни <uchar.h>
ни <threads.h>
. В нем нет 4 функций, объявленных в<uchar.h>
или любые другие функции, использующие char16_t
или char32_t
.
Код, перенесенный на Mac, для которого требуются эти возможности, должен быть либо переписан, чтобы избежать их использования (по крайней мере, в macOS), либо поддерживаться условно скомпилированным кодом, который предоставляет необходимые средства в macOS.
Попробуй это:
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 от его веб-сайта также может работать для вас: