【问题标题】:Can not make ld find libraries无法让 ld 找到库
【发布时间】:2017-05-20 19:04:49
【问题描述】:

我正在尝试在没有 sudo 权限的 Linux 机器上从源代码构建一个包,但链接器找不到必要的库:

ld: 找不到 -lstdc++

我找到了一些解决方案,其中涉及重新安装库,但如果没有 sudo,我将无法遵循。

libstdc++.so.6 存在于 /usr/lib/usr/lib64 中,命令 ld -lstdc++ --verbose 输出:

......
attempt to open /usr/lib64/libstdc++.so failed
attempt to open /usr/lib64/libstdc++.a failed
attempt to open /usr/local/lib/libstdc++.so failed
attempt to open /usr/local/lib/libstdc++.a failed
attempt to open /lib/libstdc++.so failed
attempt to open /lib/libstdc++.a failed
attempt to open /usr/lib/libstdc++.so failed
attempt to open /usr/lib/libstdc++.a failed
ld: cannot find -lstdc++

所以我做了一个符号链接:

ln -s /usr/lib/libstdc++.so.6 ~/.local/lib/libstdc++.so

然后添加LIBRARY_PATH的路径:

export LIBRARY_PATH='/home/xxx/.local/lib'

但是编译只是打印相同的输出(它没有在添加的路径中搜索库)。在编译之前我也尝试过这些,但没有成功:

export LD_FLAGS='-L/home/xxx/.local/lib'
export LIBS='-lstdc++'
export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/home/xxx/.local/lib'

我做错了什么?或者我在这里误解了什么?

【问题讨论】:

  • 修复 Linux 机器的开发配置和环境,而不是试图破解它。如果您没有 sudo 权限,那仅意味着您无法在该机器上拥有合理的开发环境。寻找另一台配置正确的机器进行开发。
  • 也许请您的系统管理员运行ldconfig。但 Sam Varshavchik 确实是对的。

标签: c++ linux build g++


【解决方案1】:

您正在为哪种架构编译? 32 位还是 64 位?因为你在 64 位系统上,但是链接了 32 位变体,你需要仔细检查。

'ld -L/home/xxx/.local/lib --verbose -lstdc++' 是什么意思?

顺便说一句:最好让机器管理员安装开发包,你甚至可能会错过头文件和其他文件。

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 2012-08-19
    • 2014-12-27
    • 2015-11-14
    • 2023-03-27
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 2021-10-24
    相关资源
    最近更新 更多