首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指定要使用的libstdc++

指定要使用的libstdc++
EN

Unix & Linux用户
提问于 2022-03-16 15:34:09
回答 1查看 2K关注 0票数 0

我想利用最近的GCC版本。因此,我编译了GCC 10并将其安装到一个非标准目录/software/gcc10/中.到目前一切尚好。

然而,当我真正想要使用这个新版本的GCC时,我会遇到一些问题。我修改了我的PATH变量以包括/software/gcc10/bin/,这样gcc --version现在确认系统找到了我的新的GCC 10编译器(而不是我的系统的GCC 8 1)。

然而,当我试图用这个设置编译一个程序时,我会发现关于std::filesystem的未定义引用的错误,它应该是GCC 10's libstdc++的一部分。这里我的假设是,虽然我现在使用的是一个更新的编译器,链接器仍然希望链接到我的系统的libstdc++而不是/software/gcc10/lib64中。

我试图更改LD_LIBRARY_PATH以包含相应的目录,但这似乎没有任何效果。

通过使用gcc选项检查运行-v的输出,我偶然发现了LIBRARY_PATH环境变量,根据gcc博士使用该变量如下:

LIBRARY_PATH的值是一个由冒号分隔的目录列表,非常类似于路径.配置为本机编译器时,GCC将尝试在搜索特殊链接器文件时指定的目录,如果无法使用GCC_EXEC_PREFIX找到它们。在搜索-l选项的普通库时,使用GCC进行链接时也会使用这些目录(但是使用-L指定的目录优先)。

实际上:设置LIBRARY_PATH变量可以使我成功地编译程序。然而,这似乎是gcc特有的解决方案,我不禁想知道是否有更标准的方法(例如,也会告诉clang在哪里查找C++标准库链接)?

更好的解决方案将是使我的新GCC 10编译器总是使用GCC 10 stdlib,而调用该系统的根8编译器将始终链接到系统link 8 stdlib。是否有一种方法可以告诉特定的编译器二进制程序,它有一个应该使用的特定stdlib?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2022-03-16 15:46:23

LIBRARY_PATH环境变量是非常标准的。大多数编译器都知道这一点。

您还应该使用C_INCLUDE_PATH和/或CPLUS_INCLUDE_PATH。这两个都是gcc特有的(其他编译器更喜欢INCLUDE,没有语言分离)。

您还可以完全忽略环境变量,并直接在命令行中指定正确的libstdc++。

代码语言:javascript
复制
g++ main.cpp /software/gcc10/.../libstdc++.a
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/694637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档