来自Ubuntu 16.04 Repo的C ++库-编译器选项

量子阱

Ubuntu 16.04带有GCC 5.4,它支持c ++ 11,它是默认的编译器。默认情况下,该特定版本的GCC中未启用c ++ 11。

我的意图是使用其存储库中的某些二进制库(不仅限于标头)(例如boost)。在我的项目中,我将启用c ++ 11。

存储库中的c ++库是如何编译的?是否可以在启用c ++ 11的情况下使用它们?我知道,可以通过将所有c ++内容隐藏在纯C接口之后,从不同的语言(Java,Python,C#等)调用c ++库。借助助推器,情况并非如此。如果某个函数从STL向我返回了字符串,向量或任何东西,那么这是一个问题。AFAIK STL对象的二进制表示形式取决于编译器标志(例如std = c ++ 11)。

谢谢你。

克里斯·贝克

您在谈论哪些确切的库?

如果您在谈论标准库,它libstdc++是的一部分gcc不管您以哪种标准进行编译,都始终可以链接它。gcc还决定包括ABI标签,以便它们可以与在C ++ 11和C ++ 11之前编译的代码兼容。例如,请参阅TC对我在这里提出的问题的一个非常好的答案:

这个使用<locale>的简单C ++程序正确吗?

如果通过

存储库中的c ++库是如何编译的?

您的意思是,如何编译ubuntu存储库中的所有C ++库,答案是,每个库的C ++库可能不同。

例如,如果您要使用libfreetype6-devlibsdl2-dev,这些都是C库,则无论您以什么标准为目标,都可以链接到它们。

如果libsilly-dev要从CEGUI使用,那是一个C ++库,通常最好对项目和要链接到的C ++库使用完全相同的编译器。如果它出现在ubuntu存储库中,则可以假定它是使用g++ubuntu出厂的默认版本构建的如果需要使用其他编译器,则最好自己构建C ++库-通常,C ++在不同的编译器甚至同一编译器的不同版本中都不是ABI稳定的。

如果要使用编译的boost库,最好使用它们给您的库并使用它们给您的编译器。如果仅使用仅标头的增强,则编译器没有关系,因为您实际上不必链接它们构建的内容。因此,您在编译器方面有了更大的灵活性。

通常,如果需要使用C ++库,最好将其构建系统集成到您的构建系统中,以便可以轻松地从源代码对其进行重建,而您只需要配置一次编译器。(至少以我的经验而言。)当您以后决定升级编译器时,这可以节省很多时间。如果使用,cmake则通常是可行的,但有时会很难,尤其是在您具有许多C ++依赖项的情况下。如果您不使用cmake,那么很多库都在使用cmake,以这种方式集成它们并不是那么容易。cmake无论如何仍然是一种痛苦,所以这可能不是那么大的损失。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 cuda ubuntu 构建 c++ opencv 4 16/04

跨不同编译器的C ++库

在 Ubuntu 16-04 上安装 opencv

快速编译器无法找到C ++库

GCC-C ++交叉编译器,缺少库

将库添加到C编译器

tsconfig.json 的编译器选项来自哪里?

来自Nim编译器的C字符串文字

C ++:来自DLL的编译器错误覆盖功能

来自 C++ 编译器的 CMake 语法高亮显示

为 C++03 编译器编写部分 unique_ptr,该编译器使用较新的编译器在公共代码库上运行

Bazel CROSSTOOL文件中的C编译器选项

“ -c”选项对Swift编译器(swiftc)有什么作用?

英特尔编译器:将fortran编译库链接到C的主程序

C标准库结构在macOS或Linux上的编译器和库版本之间是否兼容?

为什么C编译器允许从uint16_t静默转换为枚举类型?

在Ubuntu中安装C编译器,JDK等

Qt Creator / Linux:为动态库设置编译器/链接器选项-ldl

编译boost库的'number_base.hpp'时“这个库现在需要C++11或更高版本的编译器...”

Rcpp库无法在Ubuntu上构建(找不到编译器)

C / C ++编译器通常会删除重复的库吗?

使用VS 2015的Angular 2应用程序VSTS中的“未知编译器选项库”

打字稿:esnext编译器选项破坏了从外部库导入的es6

C ++中的Sign Extension是编译器选项,还是依赖于编译器或取决于目标?

即使安装后,C ++编译器也无法找到Boost库

C ++编译器标志忽略外部库的警告,但不包括目录

Gradle-Visual C ++编译器,vcpkg和外部库

从Hackage将Haskell绑定下载到c库时指定gcc编译器标志

C 编译器是否会从包含的库中删除重复的公共包含?