事实证明,"make install"——安装并暗示目标"install target libstdc++v3"的make target实际上并不意味着您已经准备好了.

我有一段时间一直在想我做错了什么,因为我认为这样一个make target会帮我做到这一点.

推荐答案

Add the library's path to the LD_LIBRARY_PATH environment variable

TL;博士

GCC要求您在找不到正确的版本时手动告诉它库的位置,这可以通过几种方式实现.一个是将其添加到LD_LIBRARY_PATH.

export LD_LIBRARY_PATH="/usr/local/lib64/:$LD_LIBRARY_PATH"

对一些人来说,图书馆的路径将是/usr/local/lib64/.其他人则报告说,图书馆路径/usr/lib/x86_64-linux-gnu/为他们工作.

Why do we need to add the library to LD_LIBRARY_PATH?

编译和安装GCC时,它会将库放在其中一个目录中,但仅此而已.根据FAQs for libstdc++,我们得到的错误意味着动态链接器找到了libstdc++共享库的错误版本.因为链接器找不到正确的版本,我们必须告诉它在哪里可以找到libstdc++库.

解决这个问题的最简单方法是使用LD_LIBRARY_PATH环境变量,这是一个以冒号分隔的目录列表,链接器将在其中搜索共享库.

还有其他方法可以解决这个问题.如果阅读make输出,您可以在安装gcc时找到此解决方案和其他简要提及的解决方案:

图书馆已安装在:

/usr/local/lib/../lib32

如果您碰巧想要链接给定目录LIBDIR中已安装的库,则必须使用libtool并指定库的完整路径名,或者在链接过程中使用"-LLIBDIR"标志并至少执行以下操作之一:

  • 在执行过程中将LIBDIR添加到"LD_LIBRARY_PATH"环境变量中
  • 在链接过程中将LIBDIR添加到"LD_RUN_PATH"环境变量中
  • 使用"-Wl,-rpath-Wl,LIBDIR"链接器标志
  • 让系统管理员将LIBDIR添加到"/etc/ld".所以形态'

有关更多信息,请参阅有关共享库的任何操作系统文档,例如ld(1)和ld.所以(8)手册页.

Grr,这很简单!还有,"如果你碰巧想链接到已安装的库",真的吗?

Linux相关问答推荐

排除最大FIFO大小故障

在不影响ROS2安装的情况下更新Ubuntu Linux中的CMake

如何判断程序是在终端上运行还是在后台运行?

如何在Linux下使用正则表达式更改文件名

使用awk命令将以:分隔的两个文件合并的方法

需要获取文件名、行号、模式在文件中的匹配位置

使用 sed 或 awk 格式化文本

使用 sed 命令仅打印正则表达式匹配

访问证书里面的图片

在 Windows 上通过 SSH 运行 django 应用程序

如何在ubuntu中通过.sh文件启动多个服务

如何在 AWS Linux 服务器上实现虚拟主机?

CHMOD 755 与 750 权限集之间的差异

Linux 非阻塞 fifo(按需日志(log)记录)

通过写入 /dev/input/mice 来控制鼠标

Linux 上 pid_t、uid_t、gid_t 的大小

分段故障处理

如何以另一个用户的身份使用 sudo 在 bash 子shell 中执行一系列命令?

什么是 linux 脚本中的 start-stop-daemon?

find -name "*.xyz" -o -name "*.abc" -exec 对所有找到的文件执行,而不仅仅是指定的最后一个后缀