PDA

Просмотр полной версии : c++ проблема с iconv()


malik555
11.07.2009, 19:28
Всем привет !

Подскажите в чем проблема - нашел функция для

перекодирования с utf-8 в cp1251

мне очень нужна эта функция но она нехочит
работать подскажите пожалуйста !



#include <stdio.h>
#include <string.h>
#include <iconv.h>
#define N 64

void utf8c1251 (char *from, char *to)
{
int fl, tl;

iconv_t d;
fl=tl=strlen(from);
d=iconv_open("CP1251","UTF-8");
iconv(d, &from,&fl,&to,&tl);
iconv_close(d);
}

int main()
{
char s[N] = "Привет", t[N] = "";

utf8c1251(s, t);
printf("s: %s\n", s);
printf("t: %s\n", t);
return 0;
}




ВЫДАЕТ



1.cpp:25:2: warning: no newline at end of file
1.cpp: In function 'void utf8c1251(char*, char*)':
1.cpp:13: error: invalid conversion from 'char**' to 'const char**'
1.cpp:13: error: initializing argument 2 of 'size_t libiconv(void*, const char**, size_t*, char**, size_t*)'
1.cpp:13: error: invalid conversion from 'int*' to 'size_t*'
1.cpp:13: error: initializing argument 3 of 'size_t libiconv(void*, const char**, size_t*, char**, size_t*)'
1.cpp:13: error: invalid conversion from 'int*' to 'size_t*'
1.cpp:13: error: initializing argument 5 of 'size_t libiconv(void*, const char**, size_t*, char**, size_t*)'




подскажите в чем проблема !

malik555
11.07.2009, 22:25
У кого есть сервер linux или freebsd попробуйте скомпелить - код вроде как написан правельно - но у меня на сервере не компелится - может проблема в сервере !

bons
11.07.2009, 22:27
У кого есть сервер linux или freebsd попробуйте скомпелить - код вроде как написан правельно - но у меня на сервере не компелится - может проблема в сервере !
нет, код написан неправильно
..
void utf8c1251 (const char *from, char *to)
{
size_t fl, tl;
...
и вообще это код на С, его желательно сохранять в файле *.c, а не *.cpp

malik555
11.07.2009, 22:38
код перепесал но проблема осталась



void utf8c1251 (const char *from, char *to)
{
size_t fl, tl;

iconv_t d;
fl=tl=strlen(from);
d=iconv_open("CP1251","UTF-8");
iconv(d, &from,&fl,&to,&tl);
iconv_close(d);
}







1.cpp:25:2: warning: no newline at end of file
/var/tmp//ccmRr1iA.o(.text+0x2a): In function `utf8c1251(char const*, char*)':
: undefined reference to `libiconv_open'
/var/tmp//ccmRr1iA.o(.text+0x54): In function `utf8c1251(char const*, char*)':
: undefined reference to `libiconv'
/var/tmp//ccmRr1iA.o(.text+0x5f): In function `utf8c1251(char const*, char*)':
: undefined reference to `libiconv_close'
/var/tmp//ccmRr1iA.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'

malik555
11.07.2009, 22:49
и вообще это код на С, его желательно сохранять в файле *.c, а не *.cpp


А мне на с++ нужен - есть у кого пример ?

malik555
12.07.2009, 15:00
Получается gcc не видит libiconv

но он установленн.




root# ldconfig -r | grep libintl
103:-lintl.8 => /usr/local/lib/libintl.so.8

root# ldconfig -r | grep iconv
19:-lkiconv.3 => /lib/libkiconv.so.3
102:-liconv.3 => /usr/local/lib/libiconv.so.3

root# ldconfig -r | grep libintl
103:-lintl.8 => /usr/local/lib/libintl.so.8

root# nm /usr/local/lib/libiconv.so.3 | grep libiconv_open
000171a0 T libiconv_open





как это лечится ?