Файл 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? Мне придется загружать новый компилятор, или я неправильно использую тот, который у меня есть?


person Community    schedule 07.07.2014    source источник
comment
Я не знаком с OSX, но у меня были похожие проблемы с поддержкой C11, которая делалаalign_alloc и различные макросы PRI доступными для uint8_t и uint64_t. Вы пытались включить #include <inttypes.h> после установки #define __STDC_FORMAT_MACROS, чтобы определить такие вещи, как uint8_t, что я и использую. #define _ISOC11_SOURCE // C11 aligned_alloc from posix_memalign(3) или -D_ISOC11_SOURCE ?   -  person Rob11311    schedule 07.07.2014
comment
Ах, глядя под Linux, я вижу, что uchar.h касается поддержки Unicode, а не проблем с неподписанными символами, которые у меня есть только в Linux, а не в Cygwin64 в настоящее время. Так что я думаю, что это более глубокая проблема с поддержкой юникода в clib.   -  person Rob11311    schedule 07.07.2014
comment
В UBUNTU я нашел ucahr.h на /usr/include/uchar.h, может это поможет вам, запустите locate uchar.h на вашем компьютере   -  person EsmaeelE    schedule 27.08.2017
comment
См. это, сначала они советуют найти место uchar.h на вашем компьютере и во-вторых, если вы не можете найти или использовать его, они предпочитают использовать unsigned short вместо типа данных заголовка, например, char16_t   -  person EsmaeelE    schedule 27.08.2017
comment
Это источник uchar.h uchar.h   -  person EsmaeelE    schedule 27.08.2017
comment
В macOS от Apple нет ни <uchar.h>, ни <threads.h>. В нем нет 4 функций, объявленных в <uchar.h>, или каких-либо других функций, использующих char16_t или char32_t. Код, перенесенный на Mac, которому нужны эти средства, должен быть либо переписан, чтобы избежать их использования, либо поддерживаться условно скомпилированным кодом, который предоставляет необходимые средства.   -  person Jonathan Leffler    schedule 13.03.2020


Ответы (2)


MacOS от Apple (до Catalina 10.15 включительно) не имеет ни <uchar.h>, ни <threads.h>. В нем нет 4 функций, объявленных в <uchar.h>, или каких-либо других функций, использующих char16_t или char32_t.

Код, перенесенный на Mac, которому нужны эти средства, должен быть либо переписан, чтобы избежать их использования (по крайней мере, в macOS), либо поддерживаться условно скомпилированным кодом, который предоставляет необходимые ему средства в macOS.

person Jonathan Leffler    schedule 13.03.2020

Попробуй это:

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

person hutheano    schedule 02.10.2017
comment
Это <unicode/uchar.h>, а не <uchar.h> У Apple нет файла uchar.h, потому что он иначе обрабатывает i18n. - person ; 23.01.2019