我尝试在 ubuntu 10.04 上安装 gcc 4.5 但失败了。这是一个我不知道如何解决的编译错误。有没有人在ubuntu上成功安装最新的gcc?以下是我的步骤和错误信息,我想知道问题出在哪里....
第一步:下载这些文件:
gcc-core-4.5.0.tar.gz
gcc-g++-4.5.0.tar.gz
gmp-4.3.2.tar.bz2
mpc-0.8.1.tar.gz
mpfr-2.4.2.tar.gz
Run Code Online (Sandbox Code Playgroud)
第二步:解压以上文件
Step3:将gmp、mpc、mpfr移动到gcc-4.5.0/目录下。
mv gmp-4.3.2 gcc-4.5.0/gmp
mv mpc-0.8.1 gcc-4.5.0/mpc
mv mpfr-2.4.2 gcc-4.5.0/mpfr
Run Code Online (Sandbox Code Playgroud)
Step4:进入gcc-4.5.0目录进行配置:
sudo ./configure
Run Code Online (Sandbox Code Playgroud)
Step5:编译安装
sudo make
sudo make install
Run Code Online (Sandbox Code Playgroud)
前4步就OK了,我就可以配置成功了。但是,当我尝试编译它时,出现以下错误消息,我无法弄清楚问题是什么。我应该将名称从“gcc 4.5”更改为“gcc”吗??需要我们自己来做这件事有点奇怪。我在安装过程中遗漏了什么吗?
xxx@xxx-laptop:/media/Data/Tool/linux/gcc 4.5/gcc-4.5.0$ sudo make
[sudo] password for xxx:
[ -f stage_final ] || echo stage3 > stage_final
/bin/bash: line 2: test: /media/Data/Tool/linux/gcc: binary operator expected
/bin/bash: /media/Data/Tool/linux/gcc: No such file or directory
make[1]: Entering directory `/media/Data/Tool/linux/gcc 4.5/gcc-4.5.0'
make[2]: Entering directory `/media/Data/Tool/linux/gcc 4.5/gcc-4.5.0'
make[3]: Entering directory …Run Code Online (Sandbox Code Playgroud) 所以,我试图涉及到multi_index_container并且我有一个相当奇怪的编译器错误,首先这里是最简单的例子来证明我的问题(我可能错过了一些简单的东西)......
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/sequenced_index.hpp>
#include <boost/multi_index/ordered_index.hpp>
#include <boost/multi_index/identity.hpp>
#include <boost/multi_index/mem_fun.hpp>
namespace multi_index = boost::multi_index;
template <typename _IdType>
class A
{
public:
typedef _IdType IdType;
IdType getId() const { return id; }
private:
IdType id;
};
struct id_index{};
template <typename Traits>
class Container
{
typedef typename Traits::AType AType;
typedef typename AType::IdType IdType;
typedef typename multi_index::multi_index_container<
AType,
multi_index::indexed_by<
// sort by Id
multi_index::ordered_non_unique<multi_index::tag<id_index>, BOOST_MULTI_INDEX_CONST_MEM_FUN(AType, IdType, getId) >
>
> ASet;
typedef typename ASet::template index<id_index>::type::const_iterator a_it;
typedef typename ASet::template index<id_index>::type::reverse_iterator …Run Code Online (Sandbox Code Playgroud) 我知道,编译编译器很讽刺.但我需要这个编译器的特定版本,而CentOS 5.x存储库没有最新版本的GCC.
我需要的版本是4.3.2但我只有4.1.1.
我按照本教程安装了gcc http://www.mjmwired.net/resources/mjm-fedora-gcc.html,我在configure(编译前)中使用了以下参数:
/root/gcc/gcc-4.3.6/configure --prefix =/opt/gcc43 --program-suffix = 43 --enable-languages = c,c ++ --enable-shared --enable-threads = posix - disable-checking --with-system-zlib --enable -__ cxa_atexit --disable-libunwind-exceptions --disable-multilib
最后一个选项--disable-multilib保存我在之前的编译尝试中得到的另一个错误(经过长时间的编译...)
另外我设置了一个环境变量,因为在以前的尝试中,我有错误,所以我设置如下:
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
这可以确保编译器在该目录中搜索mpfr和gmp库(需要它们)
所以,我执行'make'命令.
我虽然一切都还好,因为这段时间花了更多时间(在我设置该变量之前的最后一次尝试花了我2个小时编译)
我在Amazon Web Services中使用了Micro实例,这个实例只有1个单核x86_64处理器和613 MB RAM,因此编译需要大约9个小时.
不幸的是,我又错了!!,现在我得到了这个:
make[2]: Entering directory `/root/gcc/build'
make[3]: Entering directory `/root/gcc/build'
rm -f stage_current
make[3]: Leaving directory `/root/gcc/build'
Comparing stages 2 and 3
warning: ./cc1-checksum.o differs
warning: ./cc1plus-checksum.o differs
Bootstrap comparison failure!
./gcc.o differs
./varasm.o differs
./except.o differs
./i386.o …Run Code Online (Sandbox Code Playgroud) 使用gcc 4.7:
$ gcc --version
gcc (GCC) 4.7.0 20120505 (prerelease)
Run Code Online (Sandbox Code Playgroud)
代码清单(test.c):
#include <stdint.h>
struct test {
int before;
char start[0];
unsigned int v1;
unsigned int v2;
unsigned int v3;
char end[0];
int after;
};
int main(int argc, char **argv)
{
int x, y;
x = ((uintptr_t)(&((struct test*)0)->end)) - ((uintptr_t)(&((struct test*)0)->start));
y = ((&((struct test*)0)->end)) - ((&((struct test*)0)->start));
return x + y;
}
Run Code Online (Sandbox Code Playgroud)
编译和执行
$ gcc -Wall -o test test.c && ./test
Floating point exception
Run Code Online (Sandbox Code Playgroud)
SIGFPE由第二个赋值(y = ...)引起.在汇编列表中,这条线上有一个分区?请注意,x =和y =之间的唯一区别是转换为(uintptr_t).
在我的Xcode 4安装中,我只有2个编译器选项:
在许多Xcode示例中,我看到GCC 4.2显示为第三个选项,但这根本不存在.我故意干净安装XCode 4.是否有标准的方法来添加GCC 4.2,如果它还没有?我的一个项目要求我使用GCC(而不是GCC LLVM),其他项目我对GCC LLVM感到满意,所以这只是一个问题.
最近,在使用自定义分配器代码和放置 new+delete 时,我注意到一些令我惊讶的事情:当调用虚拟析构函数时,它会写入对象即将被释放的内存。
这是为什么?
(更新) 旁白:我对这里的实际行为更感兴趣,而不是 C++ 标准所说的,我确信它没有指定这种行为。
这里有一个小程序来演示:
#include <new>
#include <cstring>
#include <iostream>
using std::cout;
using std::endl;
struct Interface {
virtual ~Interface() = default;
};
struct Derived : public Interface {
};
alignas(Derived) unsigned char buffer[sizeof(Derived)];
int main() {
memset(buffer, 0xff, sizeof(buffer));
cout << "Initial first byte: 0x" << std::hex << (int)buffer[0] << endl;
// Create an instance, using 'data' as storage
Derived *pDer = ::new (buffer) Derived();
cout << "After ctor, first byte: 0x" << std::hex …Run Code Online (Sandbox Code Playgroud) 我的gcc中的错误?我的代码中的错误?都?
http://files.minthos.com/code/speedtest_doubles_wtf.cpp
不知何故,它设法"优化"一个函数,导致双精度数组被清零,在我的q6600上花费2.6秒,而不是33毫秒,更复杂的函数用一些有意义的东西填充数组.
我有兴趣知道其他人是否得到类似的结果,如果有的话,是否有人可以解释发生了什么..并且还要弄清楚是什么导致整数和浮点性能之间的巨大差异(特别是在没有优化的情况下进行编译).
我想在gcc中定义一个大尺寸指针(64位或128位),这不依赖于平台.我认为在MSDN中有类似__ptr128或__ptr64的东西.
sizeof(__ptr128) is 16 bytes.
sizeof(__ptr64 ) is 8 bytes.
Run Code Online (Sandbox Code Playgroud)
可能吗?
当你在64位操作系统中使用内核函数时需要8字节指针参数,并且你有一个32位应用程序使用32位地址并且你想使用这个内核函数.
我知道对于C11,我可以测试#if(__STDC_VERSION >= 20112L).但对于-std=c1x
我应该测试什么宏和/或值?
什么是这个标准的命名法?或者是非正式的名字,如果有的话.我希望这很清楚.提前致谢.
这是我的文件1,名为main.c
#include <stdio.h>
#include <stdlib.h>
#define MONTHS 12
void ChangeDay(void);
int* days;
int main(void)
{
days = (int*) malloc(MONTHS * sizeof(int));
if(days != NULL)
ChangeDay();
else
return 1;
printf("%2d.\n", days[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
全局变量days被声明为指向type的指针int,
malloc用于为12个整数分配空间.
这是我的文件2,名为day.c
int days[];
void ChangeDay(void)
{
days[0] = 31;
}
Run Code Online (Sandbox Code Playgroud)
ChangeDay调用该函数时,十进制值31将分配给数组天的第一个元素.
这是代码输出:
root @ where:~gcc -m32 -Wall -o day main.c day.c
day.c:1:warning:数组'days'假设有一个元素
root @ where:〜./ day分段错误
如果你向我解释这个结果,我将不胜感激.
我的问题: