运行“cargo build”时,我应该如何解决“ld:找不到-liconv库”错误?

问题描述 投票:0回答:2

通过以下命令安装 Rust 和 Cargo 后...

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

我在一个小型的“Hello World”Rust 项目上运行

cargo build
并收到以下错误:

= note: ld: library not found for -liconv
          collect2: error: ld returned 1 exit status
          

error: could not compile `hello_world` due to previous error

我尝试过

rustup self uninstall
,然后通过
brew
安装Rust和Cargo,但在尝试构建时遇到了同样的错误。

我正在运行 macOS Big Sur 11.6.4。

rust rust-cargo iconv
2个回答
12
投票

第一步是通过 Homebrew 安装

libiconv

brew install libiconv

请注意,输出显示了一些奇怪的内容:

==> Caveats
libiconv is keg-only, which means it was not symlinked into /opt/homebrew,
because macOS already provides this software and installing another version in
parallel can cause all kinds of trouble.

If you need to have libiconv first in your PATH, run:
  echo 'export PATH="/opt/homebrew/opt/libiconv/bin:$PATH"' >> ~/.zshrc

For compilers to find libiconv you may need to set:
  export LDFLAGS="-L/opt/homebrew/opt/libiconv/lib"
  export CPPFLAGS="-I/opt/homebrew/opt/libiconv/include"

我无法拼凑出完整的解释,但这与 MacOS 版本中提供的

libiconv
有错误的符号有关。在我的系统上找不到
libiconv
(是M1的东西吗?);尽管如此,brew 拒绝踩操作系统的脚趾,这似乎是一个合理的决定。

但是这些变量不适用于

cargo

解决问题的最佳方法(我发现)是修改

LIBRARY_PATH
变量以提供 iconv 的路径。您可能已经必须修改您的
LIBRARY_PATH
(参见例如 https://apple.stackexchange.com/questions/40704/homebrew-installed-libraries-how-do-i-use-them)。

我所做的是以下行添加到我的

~/.zshrc

export LIBRARY_PATH=$LIBRARY_PATH:$(brew --prefix)/lib:$(brew --prefix)/opt/libiconv/lib

之后

libiconv
被正确检测到。


5
投票

如果您安装了 GNU gcc,或者任何非 Apple C 编译器,则可能会导致此问题。

除了执行其他答案建议的操作(

brew install libiconv
)之外,还要检查您的
cc
命令是否是Apple clang或gcc的版本。您可以使用
which -a cc
来完成此操作。

您基本上可以通过运行以下命令强制

cc
成为 apple clang 版本:

export PATH="/usr/bin/:$PATH"

那么 Rust 应该可以工作

© www.soinside.com 2019 - 2024. All rights reserved.