【问题标题】:Why is gcc failing with 'unrecognized command line option "-L/lusr/opt/mpfr-2.4.2/lib"'?为什么 gcc 因“无法识别的命令行选项“-L/lusr/opt/mpfr-2.4.2/lib”而失败?
【发布时间】:2011-06-13 13:50:53
【问题描述】:

我的系统管理员最近在 /lusr/opt/gcc-4.4.3 中安装了新版本的 GCC。我测试如下:

mike@canon:~$ cat test.c
int main(){
  return 0;
}
mike@canon:~$ gcc test.c
/lusr/opt/gcc-4.4.3/libexec/gcc/i686-pc-linux-gnu/4.4.3/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory

在通知我的系统管理员这件事后,他说将/lusr/opt/mpfr-2.4.2/lib:/lusr/opt/gmp-4.3.2/lib 添加到我的LD_LIBRARY_PATH。执行此操作后,我收到以下错误:

mike@canon:~$ gcc test.c
cc1: error: unrecognized command line option "-L/lusr/opt/mpfr-2.4.2/lib"

首先,我的系统管理员并不完全确定这是最好的解决方法(尽管他确实说这对他有用...),那么有更好的解决方案吗?

其次,为什么我会收到来自cc 的链接器错误,我该如何解决?

一些可能有用的信息:

mike@canon:~$ env | grep mpfr
OLDPWD=/lusr/opt/mpfr-2.4.2/lib
LD_LIBRARY_PATH=/lusr/opt/mpfr-2.4.2/lib:/lusr/opt/gmp-4.3.2/lib:

mike@canon:~$ echo $LDFLAGS

(the above is a blank line)

【问题讨论】:

  • @Peter:显然,Intel 上的 32 位 Linux - 见证cc1 路径中使用的路径名。如果您问的是哪个 Linux 发行版,那是一个不同的问题——尽管它不应该是一个关键问题。
  • @Jonathan Leffler:鉴于他的安装被破坏了,也许这不应该被信任。
  • @Peter:也许不会……拥有这些信息并没有什么坏处。但是编译器现在运行得足够好,操作系统必须与 Linux 足够兼容,以至于它可能是 Linux 的某种变体。最终,它不会有太大的不同——他可能需要一个重建的 GCC——但包括版本和平台信息通常是个好主意。

标签: c gcc compiler-construction path ldflags


【解决方案1】:

这看起来像是 gcc 解析的一些错误参数(它不应该抱怨 -Lfoo)。

你可以试试设置

LD_LIBRARY_PATH=\ /lusr/opt/mpfr-2.4.2/lib:/lusr/opt/gmp-4.3.2/lib

所以在该 mpfr 库路径之前有一个前导空格?

【讨论】:

  • 前导空格似乎没有任何作用。 echo $LD_LIBRARY 路径似乎也没有改变。
【解决方案2】:

我建议您的系统管理员需要将 GMP 和 MPFR 库从构建机器安装到您机器上的相同位置。 (还有您可能还需要的 MPC 库。)或者,您的系统管理员需要安装 GCC 的重建 - 最好是 4.5.2 版,因为它是(AFAIK)当前版本 - 正确设置 GMP 和 MPFR 库的位置安装在您的机器上。

您无需设置 LD_LIBRARY_PATH 即可使用 GCC。如果您需要这样做,则表明它不是为运行它的机器构建的。缺少关键库。

要进一步调试,您可能需要使用:

gcc -v test.c

这将显示执行的命令行。不需要将-L 选项(它影响程序链接方式)传递给阶段 1 编译器。

【讨论】:

    猜你喜欢
    • 2020-10-06
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2020-02-03
    • 2021-10-04
    相关资源
    最近更新 更多