Файлът 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, която направи aligned_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, а не за проблеми с unsigned char, които имам само под Linux, а не Cygwin64 в момента. Така че предполагам, че това е по-дълбок проблем относно поддръжката на clib unicode.   -  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