GNU C 라이브러리는 iconv 구현을 제공합니다 - 어떻게 사용합니까?glibc의 iconv 구현을 어떻게 링크합니까?
간단한 프로그램 :
#include <iconv.h>
int main(int argc, char **argv) {
iconv_t cd = iconv_open("UTF-8", "ISO-8859-1");
iconv_close(cd);
return 0;
}
컴파일 및 링크 :
$ gcc -Wall iconv.c -o iconv
/tmp/ccKAfXNg.o: In function `main':
iconv.c:(.text+0x19): undefined reference to `libiconv_open'
iconv.c:(.text+0x29): undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
목록 그들이 존재 표시하는 기호!
$ nm -D /lib/libc-2.12.1.so | grep iconv
00017920 T iconv
00017ae0 T iconv_close
00017720 T iconv_open
GNU libiconv 라이브러리를/usr/local에 설치하고 -liconv와 링크하면 작동합니다. iconv의 glibc 구현과 어떻게 링크합니까?
편집 : 코멘트로부터의 요청에 따라 더 많은 정보 :
목록은/usr (1 경기)의 모든 iconv.h 파일
$ find /usr/ | grep "iconv\.h"
/usr/include/iconv.h
다시 설치 libc6 내-DEV 올바른 헤더가 설치되어 있는지 확인합니다.
$ dpkg -S /usr/include/iconv.h
libc6-dev: /usr/include/iconv.h
$ apt-get install --reinstall libc6-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded.
Need to get 0B/4,910kB of archives.
After this operation, 0B of additional disk space will be used.
(Reading database ... 143458 files and directories currently installed.)
Preparing to replace libc6-dev 2.12.1-0ubuntu10.1 (using .../libc6-dev_2.12.1-0ubuntu10.1_i386.deb) ...
Unpacking replacement libc6-dev ...
Setting up libc6-dev (2.12.1-0ubuntu10.1) ...
컴파일 및 제안 된 프리 프로세서 옵션을 다시 링크 : GCC -H에서
$ gcc -Wall -DLIBICONV_PLUG iconv.c -o iconv
/tmp/ccKAfXNg.o: In function `main':
iconv.c:(.text+0x19): undefined reference to `libiconv_open'
iconv.c:(.text+0x29): undefined reference to `libiconv_close'
collect2: ld returned 1 exit status
출력 :
pastbin copy of /usr/include/iconv.h
$ gcc -H iconv.c
. /usr/include/iconv.h
.. /usr/include/features.h
... /usr/include/bits/predefs.h
... /usr/include/sys/cdefs.h
.... /usr/include/bits/wordsize.h
... /usr/include/gnu/stubs.h
.... /usr/include/bits/wordsize.h
.... /usr/include/gnu/stubs-32.h
.. /usr/lib/gcc/i686-linux-gnu/4.4.5/include/stddef.h
Multiple include guards may be useful for:
/usr/include/bits/predefs.h
/usr/include/gnu/stubs-32.h
/usr/include/gnu/stubs.h
/usr/lib/gcc/i686-linux-gnu/4.4.5/include/stddef.h
수정 : 재부팅 문제를 해결했습니다. libiconv의 캐시 된 사본이 디스크에서 삭제 되었더라도 충돌을 일으키는 것으로 의심됩니다.
복제 할 수 없습니다. –
/usr/include/iconv.h의 내용을 pastebin에 제공 할 수 있습니까? – thkala
및/또는 gcc -E? –