URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7081
[ Назад ]

Исходное сообщение
"FreeBSD, std::locale problem"

Отправлено eudo , 04-Янв-08 01:59 
Добрый всем вечер.

Столкнулся с такой проблемой, std::locale("") упорно отказывается принимать в качестве аргемента строки отличные от "", "C", "POSIX", на все остальное выкидывается исключение, например:

ru_RU.CP1251 : locale::facet::_S_create_c_locale name not valid
ru_RU.CP866 : locale::facet::_S_create_c_locale name not valid
ru_RU.ISO8859-5 : locale::facet::_S_create_c_locale name not valid
ru_RU.KOI8-R : locale::facet::_S_create_c_locale name not valid

Хотя:

web-1# locale -a | grep ru_RU
ru_RU.CP1251
ru_RU.CP866
ru_RU.ISO8859-5
ru_RU.KOI8-R
ru_RU.UTF-8

Соответственно С вариант:

setlocale(LC_ALL, "ru_RU.CP1251");

работает замечательно. Собственно, может кто-то подскажет решение проблемы? Почему С++ locales не работают. Поиском не нашел.

Версии Ос и компилятора:

web-1# uname -a ; gcc -v
FreeBSD web-1 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 11:05:30 UTC 2007     root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP  i386
Using built-in specs.
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 3.4.6 [FreeBSD] 20060305


Содержание

Сообщения в этом обсуждении
"FreeBSD, std::locale problem"
Отправлено Fisher , 04-Янв-08 17:01 
Может это тебе поможет http://www.opennet.me/docs/RUS/linux_parallel/node248.html
И еще нужно вроде при компановке такой флаг указать:
LDFLAGS    = -lstdc++ -lrpcsvc -g (не уверен)

Я обычно использую 3-и файла, все три файла нах-ся в одной директории:
1) Makefile
2) myprog.mk(можно хоть как назвать, его указываешь в Makefile)
3) и собственно файл cpp (например)

Содержимое файлов следующее:
1) Makefile:
CC    =    gcc
CFLAGS  =       -I. -Wall -g -DDEBUG_DETAIL -DMYNEW
LDFLAGS    =     -lstdc++ -lrpcsvc -g

PROG    =    primer
SRCS    =    primer.cpp
        

#RARNAME    =    ../sockclient
#RARSRC    =    *.cc *.cpp *.h *.hpp Makefile myprog.mk

.include "myprog.mk"

2)myprog.mk
.SUFFIXES:    .cpp .cc

.cpp.o:
    ${CC} -c ${CFLAGS} -fhandle-exceptions -frtti ${CFADD} ${.IMPSRC}

.cc.o:
    ${CC} -c ${CFLAGS} -fhandle-exceptions -frtti ${CFADD} ${.IMPSRC}

OBJS    =  ${SRCS:R:S/$/.o/g}

${PROG}: ${OBJS} ${LIBC} ${DPADD}
    ${CC} ${LDFLAGS} -o ${.TARGET} ${OBJS} ${LDADD}

clean:
    rm -f .depend
    rm -f ${PROG} *.o *.bak .depend

depend: .depend
.depend: ${SRCS} *.h
    mkdep ${CFLAGS:M-[ID]*} ${SRCS:M*.cpp} ${SRCS:M*.c} ${SRCS:M*.cc}

rar:
    rar a ${RARNAME}.rar ${RARSRC}

restore:
    rar x ${RARNAME}.rar

all:    depend ${PROG}

3) primer.cpp
int main()
{
}

После того как все три файла создал выполни make


"FreeBSD, std::locale problem"
Отправлено eudo , 04-Янв-08 18:29 
>Может это тебе поможет http://www.opennet.me/docs/RUS/linux_parallel/node248.html
>И еще нужно вроде при компановке такой флаг указать:
>LDFLAGS = -lstdc++ -lrpcsvc -g (не уверен)

Спасибо, но это не из этой оперы :)