libiconv e MacOS

Sto cercando di compilare GCC 4.5.1 in Mac OS X Lion.

Ho un problema con libiconv. Prima si lamentavano i simboli non definiti per l’architettura x86_64, che sono stati: _iconv, _iconv_open e _iconv_close. Ho scoperto che MacPorts versione di libiconv rinominare quelli di: _libiconv, _libiconv_open e _libiconv_close. Così ho collegato il Mac OS nativo libiconv in /usr/lib invece di MacPorts libreria in /opt/local/lib.

Undefined symbols for architecture x86_64:
"_iconv", referenced from:
  _convert_using_iconv in libcpp.a(charset.o)
  __nl_find_msg in libintl.a(dcigettext.o)
 (maybe you meant: __cpp_destroy_iconv, _cpp_init_iconv )
"_iconv_close", referenced from:
  __cpp_destroy_iconv in libcpp.a(charset.o)
  __cpp_convert_input in libcpp.a(charset.o)
  __nl_free_domain_conv in libintl.a(loadmsgcat.o)
"_iconv_open", referenced from:
  _init_iconv_desc in libcpp.a(charset.o)
  __nl_init_domain_conv in libintl.a(loadmsgcat.o)

Tuttavia, dopo questo, ho provato a ricostruire dall’inizio (pulizia e tutto), ma poi si lamentava in un punto diverso su i simboli non definiti, ma questa volta _libiconv, _libiconv_open e _libiconv_close.

Undefined symbols for architecture x86_64:
  "_libiconv", referenced from:
    _identifier_to_locale in libbackend.a(pretty-print.o)
  "_libiconv_close", referenced from:
    _identifier_to_locale in libbackend.a(pretty-print.o)
  "_libiconv_open", referenced from:
    _identifier_to_locale in libbackend.a(pretty-print.o)

C’è qualche idea su come posso fare con questo? Ho trovato alcune soluzioni disinstallazione libiconv da MacPorts, ma non voglio farlo, come io ho molti porti a seconda su di esso.

  • come hai fatto a risolvere finalmente?
InformationsquelleAutor Javier Moreno | 2012-09-27



4 Replies
  1. 3

    Risolvere questo compreso due libiconv sia /usr/lib e /opt/local/lib. Questa è una sporca modo per risolvere, se qualcuno ha una soluzione migliore, si prega di inviare. Supponiamo [gcc-src] è la directory di origine del gcc. Quello che ho fatto è la seguente:

    1. In /usr/lib, copia libiconv.* come libiconv1.*
    2. Andare a [gcc-src]/gcc/Makefile.in

      cambiare
      LIBINTL = @[email protected]
      per
      LIBINTL = @[email protected] -L/opt/local/lib -liconv -L/usr/lib -liconv1
    3. Configurare da: CC=gcc-mp-4.7 CXX=g++-mp-4.7 ../gcc-4.7.2/configure --with-gmp=/opt/local --enable-languages=c,c++ --enable-checking=release —prefix=[gcc-src] <- deve essere l’indirizzo assoluto. Io uso un macport fatto gcc e g++. Forse usando gcc e g++ dal sistema di lavoro.
    4. make
    5. make install
      Il binario sarà a [gcc-src]/bin/
  2. 3

    Ho risolto da:

    $ sudo port -f deactivate libiconv
    $ ...build my project...
    $ sudo port activate libiconv

    Probabilmente c’è un modo migliore, ma io non sto usando GCC direttamente, in modo che questo aiuta, come una soluzione temporanea.

  3. 2

    Sembra che il tuo make clean in realtà non rimuovere libbackend.a dalla directory di compilazione; si stavano cercando di collegamento con la vecchia versione del codice compilato con MacPorts. L’esecuzione manuale di rm libbackend.a (o make distclean o make spotless o tutto ciò che è supposto per davvero ripulire tutto) probabilmente risolto il problema, giusto?

  4. 1

    Anche se questo è un vecchio thread, la soluzione sotto potrebbe aiutare qualcuno di ricerca storica delle domande di aiuto. Si tratta di una semplice riga di comando che possa risolvere il problema con l’uso di sed per corretto tutti i iconv funzione di riferimenti.

    $ tar xf gcc-6.4.0.tar.gz
    $ cd gcc=6.4.0
    $ # convert iconv(..)       --> _libiconv(..)
    $ # convert iconv_open(..)  --> _libiconv_open(..)
    $ # convert iconv_close(..) --> _libiconv_close(..)
    $ LC_ALL=C time \
        sed -i.bak -e '[email protected]\(iconv[^\(]*(\)@_lib\[email protected]' \
        $(grep -l -r 'iconv[^\(]*(' . 2>/dev/null)

    Ho usato la soluzione di cui sopra per questo progetto: https://github.com/jlinoff/gcc-6.4.0-boost-1.66.

    • Grazie, questo ha funzionato per me quando la Costruzione di GCC 6.3.0 fase 1, utilizzando Xcode 10 Mojave.

Lascia un commento