|
[ leka @ 08.03.2002. 18:39 ] @
| Tatko, GCC tim radi na nekim POSIX-olikim izmenama u sistemskim header fajlovima. Zapravo funkcije koje ti imas na svojoj masini zavise od C biblioteke koju imas (glibc) i NE ZAVISE OD KOMPAJLERA! :)
Ako koristis SUN masine na njima se nalazi C biblioteka u kojoj se nalazi wprintf() deklarisana u wchar.h (pokusaj takodje man wprintf :) (Za ovo znam da ima na Solarisu 2.8)
Uradi ovo, na toj masini gde nemas wcout probaj ovo i daj da vidimo sta kaze:
Code:
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
ofstream wcout;
void main()
{
static char aa[12]={"diag1.ps"};
wcout.open(aa,ios::out);
wcout << "showpage";
wcout.close();
exit(0);
}
Pozdrav
|
[ Dragi Tata @ 08.03.2002. 19:57 ] @
Hvala Leko. Znam da je do biblioteke a ne do kompajlera, ali mi to i nije neka uteha.
A proveriću ono što si poslao. Doduše, nije Solaris, nego Linux...
[ Dragi Tata @ 09.03.2002. 02:38 ] @
Nego, Leko, ne znam šta si hteo da pokažeš sa ovim. Ovo radi upravo ono što i treba: otvara fajl diag1.ps i u njega upiše "showpage". Mene sekira ovo:
Code:
#include <iostream>
using namespace std;
int main (void)
{
wcout << L"Ovo je wide-char string" << endl;
}
Prijavljuje grešku (na MinGW - u):
'wcout' undeclared (first use in this function)
A nešto slično i na Linux-u. Ne kažem, nije do kompajlera naravno, već jednostavno headeri standardne C++ biblioteke koje sam dobio uz ove kompajlere ne sadrže wostream (pa ni wcout). Da li znaš gde može da se "skine" potpuna standardna C++ biblioteka, kao i zašto je nisam dobio uz gcc (MinGW)?
[ leka @ 11.03.2002. 11:34 ] @
A jel imas wsprintf() ?
[ Dragi Tata @ 14.03.2002. 16:36 ] @
Ma imam. Imam sve funkcije koje ima Microsoftov CRT (MinGW radi sa MSVCRT-om). Ono što mi fali su C++ konstrukcije...
Nego, kaži mi, da li ti možeš da iskompajliraš primer koji sam naveo gore?
[ leka @ 14.03.2002. 16:43 ] @
Nisam mogao da ga iskompajliram, kao sto si rekao - wcout ne postoji. Nemam ovih dana vremena ni za sta, tako da nemam vremena da pogledam u vezi ovoga malo vise...
Elem, da nisu mozda nekako napravili da cout radi sa "wide" stringovima?
[ Dragi Tata @ 28.09.2004. 15:00 ] @
Moram da "povampirim" ovu staru temu. Ovaj jednostavni program:
Code:
#include <string>
using namespace std;
int main()
{
wstring str;
}
vraća grešku
Code:
test.cpp: In function `int main()':
test.cpp:6: error: `wstring' undeclared (first use this function)
test.cpp:6: error: (Each undeclared identifier is reported only once for each
function it appears in.)
test.cpp:6: error: parse error before `;' token
na kompajleru:
Code:
% gcc -v
Reading specs from /opt/gcc.3.3/lib/gcc-lib/i586-pc-interix3/3.3/specs
Configured with: : (reconfigured) : (reconfigured) /dev/fs/C/gnu2.intel/egcs.source//configure --verbose --prefix=/opt
/gcc.3.3 --disable-shared --with-stabs --enable-nls --with-local-prefix=/opt/gcc.3.3 --with-gnu-as --with-gnu-ld --enabl
e-targets=i586-pc-interix3 --enable-threads=posix
Thread model: posix
gcc version 3.3
To je zato što (iz meni nepoznatog razloga) u fajlu c++config.h stoji:
Code:
// Define if code specialized for wchar_t should be used.
/* #undef _GLIBCPP_USE_WCHAR_T */
Ako definišem ovaj makro, tek onda dobijem kermes.
Vidim da i na drugim platformama ima takvih problema: http://gcc.gnu.org/ml/libstdc++/2003-02/msg00286.html
E sad, čini mi se da je DevCpp prilično popularno okruženje među ES-ovcima, a ono koristi gcc, da pitam da li se neko sreo sa ovim i da li zna kako razrešiti ovaj galimatijas pod Windowsom.
[ idb @ 28.09.2004. 18:26 ] @
Jos uvek sebe smatram pocetnikom i sa ovim problemom se dosad nisam sreo (nisam imao potrebe).
..., ali evo mog iskustva:
Code: // Windows 2000, Dev-Cpp 4.9.8.9, GCC 3.2
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstdio>
#include <cwchar>
using namespace std;
int main(int argc, char *argv[]){
int d = 77;
float f = 777.;
wchar_t test1[] = L"Ovo je probni wchar";
static char aa[12]={"diag1.ps"};
ofstream wcout;
wcout.open(aa,ios::out);
wcout << "showpage\n"; // OK
wcout << L"Ovo je wide-char string\n" << endl; //OK
wcout<<test1<<endl; // Ne daje ono sto sam hteo nego adresu
wprintf(L"Wide-char izlaz: d = %d; f = %6.2f\n", d, f); // OK
wprintf(L"test1: %s\n",test1); // OK
wchar_t test2[55];
wcscpy(test2, test1);
wcout<<test2<<endl; // Ne daje ono sto sam hteo nego adresu
wprintf(L"test2: %s\n",test2); // OK
wcout.close();
// Ovo dole daje ocekivane rezulte
FILE *fw;
fw = fopen("widechar.txt", "w");
fwprintf(fw, L"Wide-char izlaz: d = %d; f = %6.2f\n", d, f);
fwprintf(fw, L"test1: %s\n",test1);
fwprintf(fw, L"test2: %s\n",test2);
fclose(fw);
system("PAUSE");
return 0;
}
Pokusaj rada sa klasom string, ne uspeva uz poruku:
[Linker error] undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string()'
[ idb @ 28.09.2004. 18:30 ] @
Da dopunim samog sebe:
Pokusaj rada sa klasom string ovako
Code: ...
#include <string>
....
wstring my_ws; // ovde pocijnu problemi
....
ne uspeva uz poruku:
[Linker error] undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string()'
[ Dragi Tata @ 28.09.2004. 19:21 ] @
Meni ne prepoznaje ni wcout.
Probaću kući na Cygwin-u.
[ yooyo @ 28.09.2004. 21:46 ] @
Ovo prolazi u MSVC 7.1
Code:
#include <string>
#include <iostream>
using namespace std;
wstring s;
int main(int argc, _TCHAR* argv[])
{
s = L"Tralalala";
wcout << s << endl;
return 0;
}
[ Dragi Tata @ 28.09.2004. 22:57 ] @
Znam za MSVC. Problem se javlja kad probam da ga prebacim na gcc. Prvi pt sam se sreo sa tim problemom još pre 2+ godine, kad sam prebacivao kod na Linux, a sad je to (valjda) rešeno pod Linxom, ali ne i pod većinom drugih platformi. Navodno, podrška za wide strings se po defaultu uskraćuje na platformama gde to ne radi dobro, ali je moguće izhakerisati nešto da radi. Samo pitam da li je to već neko radio na Windowsu.
[ mipko @ 29.09.2004. 14:45 ] @
locate *.h | grep wsprintf
pa ako ga ima pokazace se...
pozdrav
Mirko
[ Dragi Tata @ 29.09.2004. 15:23 ] @
Nema ga ni wsprintf.
Nego, našao sam zanimljivo objašnjenje ovde:
http://www.gamedev.net/community/forums/topic.asp?topic_id=125909
Citat: About _GLIBCPP_USE_WCHAR_T. I thinks it is set if/when running configure to build libstdc++ "an appropriate flag" is set. Otherwise unicode support would not be built in.
Probaću kad stignem da rebuildujem libstdc++. Nije mi samo jasno zašto wide string support nije uključen po defaultu.
[ mipko @ 29.09.2004. 15:42 ] @
takodje bi trebalo da je u glibc od verzije 2.1 pa nadalje to ukljuceno, evo upravo rebildujem glibc pa cemo da vidimo (samo to traje par sati)
evo ga i link
http://www.gnu.org/software/li...Formatted%20Output%20Functions
poz
Mirko
P.S.
nista od toga link sa Edinburgom mi je ocajan... a tamo mi je cluster na kome radim. Ako neko moze da proba novi glibc bio bih mu zahvalan
[ mipko @ 30.09.2004. 00:40 ] @
#include <stdio.h>
#include <wchar.h>
#include <iostream>
using namespace std;
int main()
{
wprintf(L"%ls\n",L"Widechar");
wcout << L"widechar"<<endl;
return 0;
}
ovo sve lepo radi.
Suse 9.1.
Pogledacu koji glibc imam. sad odoh da spaavam
poz
Mipko
[ Dragi Tata @ 30.09.2004. 01:27 ] @
Pod Linuxom izgleda da fino radi, bar od verzije 3 pa naviše (poslednji put kad sam programirao pod Linuxom, koristio sam gcc 2.95 a sa njim sam imao iste probleme). Fora je što ne radi pod drugim sistemima (npr FreeBSD, HP-UX, i Windows).
Pazi pod Cygwinom:
Code:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
wcout << L"Zdravo" << endl;
}
javlja:
Code:
$ g++ test.cpp
test.cpp: In function `int main()':
test.cpp:7: error: `wcout' undeclared (first use this function)
test.cpp:7: error: (Each undeclared identifier is reported only once for each
function it appears in.)
a isto i kad koristim wstring.
Iz nekog razloga kad kompajliraju libstdc++ pod Windowsom i durgim platformama, onemoguće podršku za wide stringove.
[ leka @ 01.10.2004. 06:14 ] @
Nemanja ne koristim Cygwin ni za kakvo ozbiljno programiranje. Koristim MinGW (+MSYS) uglavnom. Pokusaj da instaliras neke novije pakete... To bi sada trebalo da bude i na Windows-u. Koji libstdc++ imas instaliran tu?
[ Dragi Tata @ 01.10.2004. 13:37 ] @
Našao sam odgovor (bar za SFU, verovatno je nešto slično i za Cygwin):
http://www.interopsystems.com/tools/forum/tm.asp?m=3670
Ukratko, treba da se rebuilduje libstdc++ sa opcijom --enable-c-mbchar. Ako ikad stignem da se bavim time, javiću vam šta je bilo.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|