Die GNU C-Bibliothek bietet eine Implementierung von iconv - wie verwende ich sie?Wie verknüpfe ich glibcs Implementierung von iconv?
Einfaches Programm:
#include <iconv.h>
int main(int argc, char **argv) {
iconv_t cd = iconv_open("UTF-8", "ISO-8859-1");
iconv_close(cd);
return 0;
}
Compile und Link:
$ 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
Liste die Symbole sie existieren zu zeigen!
$ nm -D /lib/libc-2.12.1.so | grep iconv
00017920 T iconv
00017ae0 T iconv_close
00017720 T iconv_open
Wenn ich die GNU libiconv Bibliothek in/usr/local installieren und Verbindung mit -liconv es funktioniert. Wie verknüpfe ich die glibc-Implementierung von iconv?
EDIT: Weitere Informationen wie aus den Kommentaren angefordert:
Liste aller iconv.h Dateien in/usr (1 Ursache)
$ find /usr/ | grep "iconv\.h"
/usr/include/iconv.h
Neu installieren libc6-dev, um sicherzustellen, die richtigen Header installiert ist.
$ 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) ...
Compile und Link wieder mit Vorschlägen Präprozessor Option:
$ 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
Ausgabe von gcc-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
pastbin copy of /usr/include/iconv.h
Fixed: Reboot das Problem behoben. Ich vermute, dass eine zwischengespeicherte Kopie von libiconv die Konflikte verursacht hat, obwohl sie von der Festplatte gelöscht wurde.
Kann nicht dupliziert werden. –
Können Sie den Inhalt von /usr/include/iconv.h in einem Pastebin bereitstellen? – thkala
und/oder die Ausgabe von gcc -E? –