#17925: recode +universal: Undefined symbols _libintl_bindtextdomain _libintl_gettext _libintl_textdomain --------------------------------------+------------------------------------- Reporter: ryandesign@… | Owner: ryandesign@… Type: defect | Status: closed Priority: Normal | Milestone: Port Bugs Component: ports | Version: 1.7.0 Resolution: fixed | Keywords: Port: recode, gettext | --------------------------------------+------------------------------------- Changes (by ryandesign@…): * status: new => closed * resolution: => fixed Comment: I finally tried to compile [http://oriya.sarovar.org/docs/gettext_single.html a simple gettext example program] I found: {{{ #include <libintl.h> #include <locale.h> #include <stdio.h> #include <stdlib.h> int main(void) { setlocale(LC_ALL, ""); bindtextdomain("hello", "/opt/local/share/locale"); textdomain("hello"); printf(gettext("Hello, world!\n")); exit(0); } }}} It builds with: {{{ gcc -I/opt/local/include -L/opt/local/lib -lintl -o hello hello.c }}} Then I tried to build universal: {{{ gcc -I/opt/local/include -L/opt/local/lib -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -lintl -o hello hello.c }}} It fails when trying to find libiconv, which gettext uses: {{{ /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: for architecture i386 /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning can't open dynamic library: /Developer/SDKs/MacOSX10.4u.sdk/opt/local/lib/libiconv.2.dylib referenced from: /opt/local/lib/libintl.dylib (checking for undefined symbols may be affected) (No such file or directory, errno = 2) /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols: _libiconv referenced from libintl expected to be defined in /opt/local/lib/libiconv.2.dylib _libiconv_open referenced from libintl expected to be defined in /opt/local/lib/libiconv.2.dylib _libiconv_set_relocation_prefix referenced from libintl expected to be defined in /opt/local/lib/libiconv.2.dylib collect2: ld returned 1 exit status }}} Because I specified `-isysroot` but not `-liconv` it thinks it's supposed to look for libiconv in the MacPorts prefix ''inside the sysroot'' -- inside /Developer/SDKs/MacOSX10.4u.sdk -- but of course there isn't any MacPorts prefix inside the SDK. If I add `-liconv` it knows not to prepend the sysroot and works fine: {{{ gcc -I/opt/local/include -L/opt/local/lib -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386 -lintl -liconv -o hello hello.c }}} So I imagine that the configure script is doing the same thing, is not using `-liconv`, and when the program fails to compile, it assumes this is because gettext doesn't exist. The easy fix is to add `-liconv` to the `configure.ldflags` which I did in r46175. -- Ticket URL: <http://trac.macports.org/ticket/17925#comment:5> MacPorts <http://www.macports.org/> Ports system for Mac OS