Файл 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 от его веб-сайта также может работать для вас:

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

Другие вопросы по тегам