草庐IT

c++ - GCC 4.7 编译的库是否与 GCC 4.6.3 程序兼容?

我有一个巨大的C++11项目,其中包含类似功能的插件。我的项目有几个库(用gcc4.6.3编译)、一个前端(用gcc4.6.3编译)和一些插件(用gcc4.7编译)。插件通过dlopen加载并从库中引用内容。我的项目使用模板、typeinfo、shared_ptr、STL容器等。当我使用相同版本的gcc编译所有内容时,一切运行正常。当我按照我描述的方式编译时(4.6.3中的库和前端以及4.7中的插件)我开始面临问题。我不确定发生了什么,我希望你能给我一些线索,帮助我解决这个问题。 最佳答案 G++4.6与4.7兼容,尽管人们在这里声

c++ - GCC 中的 unordered_map 错误

unordered_map概念是什么时候内置到g++中的?因为下面的代码会抛出错误。#include#include#includeusingnamespacestd;std::unordered_mapmirror;mirror['A']='A';mirror['B']='#';mirror['E']=3;intmain(void){std::cout我正在编译代码如下:g++-chashexample.cppg++-oresulthashExample.o./result我得到的错误是这样的:inavalidtypesint[char[foraaraysubscript解决这个问题

c++ - gcc include命令坏了?

我遇到了一个奇怪的问题,linuxc++编译器包含本地目录而不是系统目录中的文件。使用(-H)选项查看预编译器输出。可以看到系统文件/usr/include/sched.h突然包含了time.h头本地目录而不是系统目录。我假设如果包含文件在括号内,系统目录应该首先查找,sched.h中的相关行是:-#include带有(-H)选项的编译器输出:-...../usr/include/c++/4.6/bits/basic_string.h....../usr/include/c++/4.6/ext/atomicity.h......./usr/include/c++/4.6/i686-li

c++ - 减少内存分配 GCC 命令

今天,在我的计算机科学课上,我被告知我可以调整我的程序在编译期间可以分配的内存量(使用GCC、Linux)。此数量默认设置为最佳模式(这意味着尽可能多)。在调试我的应用程序期间,我可以极大地受益于此编译器功能,因为我需要正确处理分配错误,这在我的PC上具有超过16GB的RAM时非常棘手。有人知道这个选项是什么吗?我希望像gcc--maxalloc1024这样的东西意味着我的程序最多可以分配1024个字节内存。 最佳答案 我不知道编译器选项。但是,ulimitLinux命令可用于限制进程可以使用的内存量。例如,以下命令将限制从当前sh

linux - gcc 4.8.1 不会使

我新安装了UbuntuLinux,我正在尝试更新我的gcc编译器。最新的gcc编译器依赖于gmp、mpfr和mpc,因此我按照说明下载了这些并将源代码放入gcc4.8.1源文件夹中。configure似乎运行得很好。我没有包含任何选项,因为似乎没有一个合适。我只是使用默认值运行。当我运行make时,出现以下错误:configure:error:C++compilermissingorinoperationalmake[2]:\***[configure-stage1-libcpp]Error1make[2]:Leavingdirectory`/home/clay/programming

c++ - 使用 GCC 输出注释和注释的中间文件

是否有可能说服GCC发出一个显示以下内容的中间文件:评论原始来源扩展宏定义编译器应用的优化生成的C或C++代码将被转换为汇编代码?我宁愿看中级C/C++而不是汇编程序,但如果它有足够的注释,我也可以只使用汇编程序。我正在尝试对一个几乎完全由宏组成的库进行逆向工程以扩展它。我也想看看优化的效果,以便给编译器更多的机会做更多的优化。(换句话说,就是看看我之前的尝试哪里失效了) 最佳答案 GCC不是直接在C++代码中应用优化,而是在某些内部语言独立格式(称为GIMPLE)中应用优化,这种格式不能轻易恢复为C++代码。根据你的需要,你可以选

c - gcc -g0 并且没有 -g 选项

在gcc中不带-g选项编译和带-g0选项编译有什么区别?在gcc中提供-g0选项背后有什么具体原因吗?我尝试编译并在GDB中的两种情况下都发现了“没有调试符号”消息。 最佳答案 如果你去GCCmanual,你会发现它说:-glevel…Requestdebugginginformationandalsouseleveltospecifyhowmuchinformation.Thedefaultlevelis2.Level0producesnodebuginformationatall.Thus,-g0negates-g.因此,如果您

c++ - -m32 选项不适用于 gcc 但适用于 g++

我试图在x86_64ubuntu12.04机器上为32位目标编译一个应用程序。我使用安装了所需的包sudoapt-getinstallgcc-multilibg++-multiliblibc6-i386libc6-dev-i386第一个命令可以生成32位版本。然而,第二个命令出错了1.g++-m32hello.c2.gcc-m32hello.cskippingincompatible/usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.awhensearchingfor-lgcc/usr/bin/ld:cannotfind-lgcc/usr/bin/ld:s

linux - 在 Alpine 上从源代码安装 GCC

尝试在Alpine上安装GCC6.4.0时,我遇到了:checkingforthecorrectversionofgmp.h...yescheckingforthecorrectversionofmpfr.h...yescheckingforthecorrectversionofmpc.h...yescheckingforthecorrectversionofthegmp/mpfr/mpclibraries...no但是在似乎是标准查找目录的/usr/lib中,我有:libgmp.alibgmp.solibgmp.so.10libgmp.so.10.3.2libmpc.so.3libm

c++ - 使用 C++11 与 GCC 4.8 默认会导致私有(private)继承和提升的链接错误

序言处理一大段我目前无法分解成MCVE的代码,所以我会尽力而为。问题我正在处理一个编译为静态库的大型项目libfoo.a。一个单独的项目bar链接到该库。libfoo中的“违规”片段如下:classBase{public:voidfoo(){}voidbar(){}};classDerived:privateBase{public:usingBase::foo;};libfoo和bar都广泛使用了boost.bar必须使用-std=c++11进行编译,因为它使用了C++11特性,但是libfoo可以使用最少的选项编译(即-std=c++0xGCCv4.8使用的默认编译器选项,这似乎是-