2015-05-24 5 views
3

Я только что начал использовать Java на своем MacOS, и у меня возникла следующая ошибка при компиляции моего первого .java-файла с помощью javac.dyld: Символ не найден: _iconv при использовании javac для компиляции на MacOS

dyld: Symbol not found: _iconv 
    Referenced from: /usr/lib/libcups.2.dylib 
    Expected in: /opt/local/lib/libiconv.2.dylib 
in /usr/lib/libcups.2.dylib 
Trace/BPT trap: 5 

Может ли кто-нибудь решить эту проблему?

+0

Похоже, что у вас установлено 'DYLD_SEARCH_PATH' значение, в том числе'/opt/local/lib', которое содержит копию 'libiconv.2.dylib', которая мешает системной копии той же библиотеки. Я предполагаю, что вы установили macports? Если вы отмените переменную, вы сможете скомпилировать java-программу. – Petesh

+0

Да, вы правы. Я установил DYLD_LIBRARY_PATH как/opt/local/lib и macports. Я сбросил этот DYLD_LIBRARY_PATH на пустой, и он сработал. – cbear1985

ответ

3

Это обычная проблема при использовании macports, и вы устанавливаете для переменной DYLD_LIBRARY_PATH значение /opt/local/lib. Есть несколько библиотек в macports, которые могут помешать работе с системными библиотеками, и когда вы находитесь в командной строке, это приведет к тому, что программы не будут запущены в этом случае.

Временные решения заменяют переменную для оболочки, но это может привести к проблемам с запуском других приложений macports. Если вы просто работаете из командной строки, вы можете создавать функции в вашем .bashrc, которые запускают команды без переменной, например.

java() 
{ 
    env DYLD_LIBRARY_PATH= java "[email protected]" 
} 

и аналогичные для JAVAC и т.д. Это позволит вам оставить переменную, определенную, но предотвратить помехи при вызове этих конкретных инструментов командной строки.

Я переехал от macports к homebrew, который немного лучше себя ведет в этом отношении - он вообще отказывается вкладывать вещи в путь, который мешает системным библиотекам, не заставляя проблему - это личный выбор, хотя , и не рекомендует вам переключаться.