Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   c++ проблема с iconv() (https://forum.antichat.xyz/showthread.php?t=129336)

malik555 11.07.2009 19:28

c++ проблема с iconv()
 
Всем привет !

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

перекодирования с 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

Цитата:

Сообщение от bons
и вообще это код на С, его желательно сохранять в файле *.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


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


Время: 22:56