标签: gcc4

ubuntu下gcc 4.5安装问题

我尝试在 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)

c++ compiler-construction ubuntu g++ gcc4

4
推荐指数
1
解决办法
3908
查看次数

提升multi_index_container,按标签获取索引导致编译器错误

所以,我试图涉及到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)

c++ templates boost gcc4

4
推荐指数
1
解决办法
1328
查看次数

编译编译器GCC时出错

我知道,编译编译器很讽刺.但我需要这个编译器的特定版本,而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 centos5 makefile centos gcc4

4
推荐指数
1
解决办法
8292
查看次数

为什么此代码会导致浮点异常 - SIGFPE

使用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).

c exception compiler-optimization gcc4

4
推荐指数
1
解决办法
4831
查看次数

Xcode 4中没有gcc 4.2编译器选项?

在我的Xcode 4安装中,我只有2个编译器选项:

  1. Apple LLVM编译器3.0
  2. GCC LLVM 4.2

在许多Xcode示例中,我看到GCC 4.2显示为第三个选项,但这根本不存在.我故意干净安装XCode 4.是否有标准的方法来添加GCC 4.2,如果它还没有?我的一个项目要求我使用GCC(而不是GCC LLVM),其他项目我对GCC LLVM感到满意,所以这只是一个问题.

iphone xcode gcc4 xcode4

3
推荐指数
1
解决办法
1760
查看次数

为什么虚拟析构函数写入内存?

最近,在使用自定义分配器代码和放置 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)

c++ gcc gcc4 virtual-destructor

3
推荐指数
1
解决办法
101
查看次数

g ++,双打,优化和大型WTF

我的gcc中的错误?我的代码中的错误?都?

http://files.minthos.com/code/speedtest_doubles_wtf.cpp

不知何故,它设法"优化"一个函数,导致双精度数组被清零,在我的q6600上花费2.6秒,而不是33毫秒,更复杂的函数用一些有意义的东西填充数组.

我有兴趣知道其他人是否得到类似的结果,如果有的话,是否有人可以解释发生了什么..并且还要弄清楚是什么导致整数和浮点性能之间的巨大差异(特别是在没有优化的情况下进行编译).

c++ performance gcc4

2
推荐指数
1
解决办法
284
查看次数

gcc中的大小指针

我想在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位地址并且你想使用这个内核函数.

linux gcc pointers 32bit-64bit gcc4

2
推荐指数
1
解决办法
1590
查看次数

如果使用-std = c1x,如何使用__STDC_VERSION__进行检查?

我知道对于C11,我可以测试#if(__STDC_VERSION >= 20112L).但对于-std=c1x

我应该测试什么宏和/或值?

什么是这个标准的命名法?或者是非正式的名字,如果有的话.我希望这很清楚.提前致谢.

c gcc4 c11

2
推荐指数
1
解决办法
2046
查看次数

指向多个源文件之间共享的数组的指针

这是我的文件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分段错误

如果你向我解释这个结果,我将不胜感激.

我的问题:

  • 在多个源文件中声明变量(包括数组)的正确方法是什么?
  • 当在不同的文件中声明它们时,如何使用指针访问数组的元素?

c gcc gcc4

2
推荐指数
1
解决办法
3216
查看次数