Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не собирается проект с русскими буквами, Компилятор DEV C++ 
V
    Опции темы
Anikmar
Дата 20.9.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Для проверки свох dll, созданых на билдере установил Dev C++ (чтобы проверять сторонней штукой).
Ни разу не видел - первые впечатления самые благоприятные. Очень легкая и быстрая штука. Окошки на нем рисовать долго, поэтому проверяю из консоли. И вот с чем столкнулся:
Если работаю с типом wchar_t, то работает сие только если внутри строки английские буквы.
т.е.
Код

wprintf(L"Hello!"); // Работает
wprintf(L"Привет!"); // Ошибка при сборке

Ошибка:
Illegal byte sequence 

Как я понял ругается линкер. Как его уговорить? Где что подкрутить?

PM MAIL ICQ   Вверх
zim22
Дата 20.9.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата

Данная ошибка возникает, когда используется указатель на Unicode строку, но в самой строке используются символы не-Unicode. 
Чаще всего возникает при использовании компилятора MinGW под Windows, где кодировкой по-умолчанию является CP1251.

источник


--------------------
PM MAIL   Вверх
Anikmar
Дата 20.9.2009, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



zim22, спасибо, конечно. Но как с этим бороться? Можно все и по-англицки писать, но проблема в том, что многие мои проверяемые функции из DLL шлют имено wchar_t строки. И этот поросенок (компилятор) напрочь не хочет их выводить. Под отладчиком вроде похоже на правду, но не под отладчиком же все смотреть!

Думаю, что если победю эту ошибку, то и вывод наладится. А вот с чем это может быть связано пока не врублюсь - там настроек то три штуки, тут где-то в другом месте подкручивать надо.

Чую, что литр, а доказать - не могу.  smile 

Dev же с *nix вроде как в винду пришел, а они любители всякие настроечные файлы создавать. Может он где-то рядом?
PM MAIL ICQ   Вверх
zim22
Дата 20.9.2009, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  20.9.2009,  21:01 Найти цитируемый пост)
. Но как с этим бороться?

у меня DevCPP нет под рукой. Вот как это лечится в Code::blocks:
Цитата

First goto the menu "Project->Build Options" then click your project name. Inside of your global project settings select "Compiler Settings" then click "Other Options" tab, now in that multiline text control write this:

-finput-charset=iso-8859-1

That will fix the problem compiling the standard Latin characters available in the ascci table: á é í ó ú ñ Ñ É and others I does not remember.

источник
***
может CodeBlocks поставишь вместо DevCPP? smile
скачать(19.3 Mb)

Это сообщение отредактировал(а) zim22 - 20.9.2009, 21:13


--------------------
PM MAIL   Вверх
Anikmar
Дата 20.9.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(zim22 @  20.9.2009,  21:10 Найти цитируемый пост)
у меня DevCPP нет под рукой. Вот как это лечится в Code::blocks:

Эх, если бы в Dev C++ был такой замечательный пункт в настройках проекта... (Либо если он есть и я бы знал где он находится...) Я сначала думал, что это можно только при создании нового проекта указать. Создал еще один - ни фига, та же хрень.

Блин - столько времени на ерунду теряю, стыдно даже.

Не окна же рисовать - запарно вручную! Хотел на студии проверить - но она мертво упала, надо переустанавливать, а это тоже гоноболь еще та. Может еще что-нибудь легкое и хорошее типа DevC++ есть? 
PM MAIL ICQ   Вверх
zim22
Дата 21.9.2009, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  20.9.2009,  21:14 Найти цитируемый пост)
Может еще что-нибудь легкое и хорошее типа DevC++ есть? 

Code::blocks smile


--------------------
PM MAIL   Вверх
Anikmar
Дата 21.9.2009, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(zim22 @  21.9.2009,  08:08 Найти цитируемый пост)
Code::blocks

Это что? И с чем едят?
PM MAIL ICQ   Вверх
zim22
Дата 21.9.2009, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  21.9.2009,  08:11 Найти цитируемый пост)
Это что? И с чем едят?

это улучшенный devcpp
http://www.codeblocks.org/


--------------------
PM MAIL   Вверх
Anikmar
Дата 21.9.2009, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Попробую с ним.
Вообще странная фишка.
Я посмотрел - с ней многие столкнулись, но нигде не смог найти решения. Правда на одном китайском форуме вроде что-то интересное проскакивало, но ответ был в иероглифах, а в них я гораздо хуже, чем в английском. Прямо скажем намного хуже. Вернее совсем никак.  smile 
PM MAIL ICQ   Вверх
zim22
Дата 21.9.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(Anikmar @  21.9.2009,  08:17 Найти цитируемый пост)
Попробую с ним.

только качай версию с уже встроенным mingw. она лучше.
выше я уже давал ссылку на неё.


--------------------
PM MAIL   Вверх
Anikmar
Дата 21.9.2009, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Установил.
Код:
Код

#include <iostream>

using namespace std;

int main()
{
    wchar_t Str[] = L"Мне надоело бороться с какой-то фигней!";
    // wchar_t Str[] = L"Hello world!";
    wprintf(Str);
    return 0;
}


При первой попытке - та же ошибка. Но здесь есть настройки редактора. Поставил кодировку UTF-8 - ошибка исчезла, правда строчка не выводится.
Попробовал UTF-32, default - таже фигня.
Т.е. wprintf выдает пустую строку.

В принципе сдвиг ощутимый - по крайней мере уже поэкспериментировать можно.
PM MAIL ICQ   Вверх
ller
Дата 21.9.2009, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

Репутация: 2
Всего: 4



Есть еще CodeLite тот же Code::Block только вид сбоку. Я ей пользуюсь. У лайта вид похуже чем у блока, но вроде как блок в прошлом году вышел последний.
PM MAIL   Вверх
zim22
Дата 21.9.2009, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Anikmar, что-то ты не то делаешь.
со случаем
Цитата

wprintf(L"Привет!"); // Ошибка при сборке

я боролся так:
Codeblocks-Create New Project-Console Application-Next-C++-NEXT-NEXT-NEXT...

клацаем слева на файле main.cpp (в папке Sources)
Код

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello world!" << endl;
    return 0;
}



добавляем строку wprintf(L"Привет!"); 
билдим (CTRL+F9)
получаем ошибку
Цитата

main.cpp|7|converting to execution character set: Illegal byte sequence|


добавляем кодировку 
Цитата

-finput-charset=iso-8859-1

и всё. ошибки нет. всё отлично. в чём проблема?


--------------------
PM MAIL   Вверх
Anikmar
Дата 21.9.2009, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(zim22 @  21.9.2009,  08:49 Найти цитируемый пост)
Anikmar, что-то ты не то делаешь.

Ага, я это не добавил.

Теперь добавил - ошибки нет, получаю в консоли крякозябры. Это прогресс, уже лучше. Думаю крякозябры из-за того, что менял кодировку в редакторе. Ща проверю на новом проекте.
PM MAIL ICQ   Вверх
mrbrooks
Дата 21.9.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



используйте C# - в нем таких проблем нет  smile шутке


Anikmar, кстати  камрад - ради спортивного интереса проверь - как оно вот так:

Код

std::locale::global(std::locale("Russian"));
std::cout << "Хеллоу ворлд!\n";

PM MAIL   Вверх
Anikmar
Дата 21.9.2009, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



zim22, в общем все нормально кроме крякозябров. Правда с крякозябрами в ситуации wprintf я еще не сталкивался, нотут хоть более-менее понятно в чем дело.

Теперь уже легче. Спасибо.

Добавлено через 4 минуты и 48 секунд
Цитата(mrbrooks @  21.9.2009,  09:04 Найти цитируемый пост)
используйте C# - в нем таких проблем нет

В билдере таких тоже нет, но есть другие (например - цена)  smile 



Цитата(mrbrooks @  21.9.2009,  09:04 Найти цитируемый пост)
Anikmar, кстати  камрад - ради спортивного интереса проверь - как оно вот так:

Вывод программы:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Process returned 3 (0x3)   execution time : 0.015 s
Press any key to continue.

Проблема у меня не в крякозябрах была - с ними я уж как-нибудь справлюсь. А в том, что проект не компилировался (вернее не собирался).
PM MAIL ICQ   Вверх
Anikmar
Дата 21.9.2009, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



В общем при помощи дополнительного флага компилятора 
-finput-charset=iso-8859-1
проблема решилась.

Крякозябры пока не победил - ни один из известных мне способов пока не помог, думаю разберусь. В общем тему закрываю.
PM MAIL ICQ   Вверх
mrbrooks
Дата 21.9.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 19
Всего: 306



Цитата(Anikmar @  21.9.2009,  09:04 Найти цитируемый пост)
Вывод программы:

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Process returned 3 (0x3)   execution time : 0.015 s
Press any key to continue.

Ужос. Я люблю M$ VS. Учитывая, что есть EE.

Цитата(Anikmar @  21.9.2009,  09:04 Найти цитируемый пост)
В билдере таких тоже нет, но есть другие (например - цена)

Ага. Нововая ценовая политика просто супер. Дебилдер "фтопку"!
PM MAIL   Вверх
zim22
Дата 21.9.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(mrbrooks @  21.9.2009,  13:53 Найти цитируемый пост)
Ужос. Я люблю M$ VS. Учитывая, что есть EE.

я его тоже люблю. но иногда полезно прогнать исходник через разные компиляторы.


--------------------
PM MAIL   Вверх
ller
Дата 21.9.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

Репутация: 2
Всего: 4



У меня компилирует, только ничего не выводит, а с ключом  -finput-charset=iso-8859-1 получаю вот что.

Код

cc1plus.exe: error: no iconv implementation, cannot convert from iso-8859-1 to UTF-8
D:/Lex/CodeLite/Mesh/test/main.cpp:1:19: error: no iconv implementation, cannot convert from iso-8859-1 to UTF-8
In file included from D:/Lex/CodeLite/Mesh/test/main.cpp:1:
c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iostream:39:28: error: no iconv implementation, cannot convert from iso-8859-1 to UTF-8
In file included from c:\mingw\bin\../lib/gcc/mingw32/4.4.0/include/c++/iostream:39,
                 from D:/Lex/CodeLite/Mesh/test/main.cpp:1:



Добавлено через 53 секунды
А на счет кракозябров, попробуй вместо -finput-charset=iso-8859-1 что то типа -finput-charset=cp866 для консоли
PM MAIL   Вверх
Anikmar
Дата 22.9.2009, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Цитата(ller @  21.9.2009,  22:24 Найти цитируемый пост)
А на счет кракозябров, попробуй вместо -finput-charset=iso-8859-1 что то типа -finput-charset=cp866 для консоли 

Все дело в том, что нормального рецепта работы wprintf я не нашел. SetLocale у меня никакого особого эффекта не произвело. Устав с экспериментами я просто перевожу wchar_t в char, затем использую CharToOem.
PM MAIL ICQ   Вверх
bsa
Дата 22.9.2009, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(ller @ 21.9.2009,  22:24)
А на счет кракозябров, попробуй вместо -finput-charset=iso-8859-1 что то типа -finput-charset=cp866 для консоли

Ну тогда уж cp1251, так как текст программы вряд ли в консоли набирается.
PM   Вверх
Anikmar
Дата 22.9.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 5
Всего: 59



Вся эта фигня мне нужна именно затем, чтобы вывести в консоль именно wchar_t. С обычным выводом все в порядке.
Конкретно Dev кодирует Unicode в обычный 1251. Проверил опытным путем. Т.е. функция вывода Unicode текста в консоль выглядит так и я пока ей пользуюсь:
Код

#include <windows.h>
#include <ostream>
#include <wchar.h>
#include <locale.h>
#include <stdarg.h>

using namespace std;

char *MAN_WStrToOEM(wchar_t *pStr, char*pBuff)
{
    int i=0;
    char Temp[512];
    do
    {
        Temp[i] = (char)pStr[i];
    } while (pStr[i++] != 0);
    CharToOemA(Temp,pBuff);
    return pBuff;
}

int main()
{
    char Buff[512];
    wchar_t wBuf[] = L"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

    printf("Str = %s\n",MAN_WStrToOEM(L"Привет, ламер необразованный",Buff));
    printf("Str = %s\n",MAN_WStrToOEM(wBuf,Buff));

return 0;
}


PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1125 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.