Несколько установок библиотеки Iconv, вызывающие ошибки

0

Вчера я загрузил значок и установил его, используя:

$ ./configure --prefix=/usr/local
$ make
$ make install

Когда я попытался запустить iconv из оболочки, я получил жалобу, что файл общих объектов не найден, поэтому я выполнил export LD_LIBRARY_PATH=/usr/local/lib. Затем работал значок.

Это вызвало ошибку в моем приложении. Я не знал, что в один из исходных файлов уже включен iconv.h. Сегодня я успешно построил отладочную версию несколько раз в eclipse, но когда дело доходит до сборки релиза, я получаю следующие ошибки:

undefined reference to 'libiconv_close' 
undefined reference to 'libiconv_open'  
undefined reference to 'libiconv'

Затем я впал в панику и начал make uninstall, перезагрузился, но проблема остается. Как я могу снова запустить свою программу?

ldconfig -v | grep "iconv" shows:
libiconv.so.2 -> libiconv.so.2.5.1

Я на Ubuntu 12.04 LTS

Теги:
libraries
iconv

1 ответ

1
Лучший ответ

LD_LIBRARY_PATH является переопределением, которое должно использоваться только для целей отладки или для работы с ошибками, которые было бы слишком сложно исправить в противном случае.

Ни в коем случае не следует устанавливать его глобально в своей среде, потому что именно то, что вы описали здесь, должно произойти рано или поздно, особенно когда вы устанавливаете вручную скомпилированное программное обеспечение в системные каталоги... (Вопрос: Почему вы не установили iconv через ваш менеджер пакетов? Это всегда должно быть вашим первым выбором.)

Если для установки iconv требуется путь к библиотеке, создайте псевдоним с локальным переопределением:

alias iconv="LD_LIBRARY_PATH=/usr/local/lib iconv"

Это заставляет iconv работать корректно, но не влияет на другие пакеты или создает процессы.


В нижней строке найдите export LD_LIBRARY_PATH=... (где бы вы его ни разместили) и избавляйтесь от него. Это должно заставить ваше приложение правильно скомпилировать (если, конечно, вы не скомпилировали свою систему вручную, установив/удалили в /usr...)

  • 0
    Спасибо, я усвоил урок. Я могу снова запустить мою программу после того, как я добавлю -liconv и скопирую общий объектный файл в /usr/lib . Как получилось, что раньше это обходилось без этого? iconv.h не копируется в проект.
  • 0
    @ Хозяин: Сложно сказать, потому что вы не дали достаточно информации. (Не то чтобы я был слишком заинтересован в этом.) Общее правило, никогда не копаться в / usr вручную. Вы можете --prefix программного обеспечения куда-то в $ {HOME}, если это необходимо, но /usr должен быть единственным доменом вашего менеджера пакетов. Вы обязательно столкнетесь с проблемами позже (например, когда менеджер пакетов удалит или перезапишет файлы, которые вы поместили в /usr вручную).
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню