dyld:Symbol未找到:\在MacOS上使用javac编译时使用iconv

dyld:Symbol未找到:\在MacOS上使用javac编译时使用iconv,java,macos,compiler-errors,dyld,Java,Macos,Compiler Errors,Dyld,我刚刚开始在MacOS上使用Java,在使用javac编译我的第一个.Java文件时出现了以下错误 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 有人能解决这个问题吗?这是使用macports时经常出现的问

我刚刚开始在MacOS上使用Java,在使用javac编译我的第一个.Java文件时出现了以下错误

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

有人能解决这个问题吗?

这是使用macports时经常出现的问题,您可以将
DYLD\u LIBRARY\u PATH
变量设置为具有
/opt/local/lib
。macports中的某些库可能会干扰系统库,在这种情况下,当您使用命令行时,会导致程序无法启动

解决方法是取消设置shell的变量,但这可能会导致运行其他macports应用程序时出现问题。如果您只是从命令行运行,则可以在
.bashrc
中创建函数来运行不带变量的命令,例如

java() 
{ 
    env DYLD_LIBRARY_PATH= java "$@"
}
和javac等类似。这将允许您保留定义的变量,但在调用这些特定的命令行工具时防止干扰


在这方面,我已经从一个比较好的方面转移到了另一个方面-它通常拒绝在不强制发布的情况下将干扰系统库的东西放到路径中-尽管这是个人选择的事情,而且不建议您切换。

听起来您的
DYLD\u SEARCH\u PATH
设置了一些内容,包括
/opt/local/lib
,其中包含
libiconv.2.dylib
的副本,这会干扰同一库的系统副本。我猜你安装了macports?如果您取消设置变量,那么您应该能够编译java程序。是的,您是对的。我已经将DYLD_LIBRARY_路径设置为/opt/local/lib和macports。我将这个DYLD_库路径重置为空,它就工作了。