c++ проблема с iconv()

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by malik555, 11 Jul 2009.

  1. malik555

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0
    Всем привет !

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

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

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

    Code:
    
         #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;
    }
    
    

    ВЫДАЕТ

    Code:
    
    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*)'
    
    

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

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0
    У кого есть сервер linux или freebsd попробуйте скомпелить - код вроде как написан правельно - но у меня на сервере не компелится - может проблема в сервере !
     
  3. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    нет, код написан неправильно
    Code:
    ..
    void utf8c1251 ([COLOR=red]const[/COLOR] char *from, char *to)
    {
         [COLOR=red]size_t[/COLOR] fl, tl;
    ...
    и вообще это код на С, его желательно сохранять в файле *.c, а не *.cpp
     
    #3 bons, 11 Jul 2009
    Last edited: 11 Jul 2009
  4. malik555

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0
    код перепесал но проблема осталась

    Code:
    
    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);                               
    }
    
    

    Code:
    
    
    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'
    
    
    
     
  5. malik555

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0

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

    malik555 New Member

    Joined:
    4 Feb 2009
    Messages:
    132
    Likes Received:
    1
    Reputations:
    0
    Получается gcc не видит libiconv

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

    Code:
    
    
    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
    
    
    

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