标签: g++

在makefile中转义

我正在尝试在makefile中执行此操作,但它失败的可能性非常大:

M_ARCH := $(shell g++ -dumpmachine | awk '{split($1,a,"-");print a[1]}')
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗?我想它与逃避有关,但是在哪里和哪里?

makefile g++ escaping gnu-make

81
推荐指数
2
解决办法
4万
查看次数

错误:free():下一个大小无效(快):

我得到的这个奇怪的错误是什么?我在Ubuntu 10.10上使用g ++编译C++.当我运行可执行文件时它会随机弹出(可能是8小时内2次,每小时10次编译).但是,如果我清理并重新编译它会在大多数时间消失.

*** glibc detected *** ./emailQueue.app: free(): invalid next size (fast): 0x0000000001c40270 ***
======= Backtrace: =========
/lib/libc.so.6(+0x774b6)[0x7f490d95e4b6]
/lib/libc.so.6(cfree+0x73)[0x7f490d964c83]
./emailQueue.app[0x401f47]
/lib/libc.so.6(__libc_start_main+0xfe)[0x7f490d905d8e]
./emailQueue.app[0x401cc9]
======= Memory map: ========
00400000-0040d000 r-xp 00000000 08:01 1311132                            /home/server/Projects/email/emailQueue.app
0060d000-0060e000 r--p 0000d000 08:01 1311132                            /home/server/Projects/email/emailQueue.app
0060e000-0060f000 rw-p 0000e000 08:01 1311132                            /home/server/Projects/email/emailQueue.app
01c40000-01c82000 rw-p 00000000 00:00 0                                  [heap]
7f4908000000-7f4908021000 rw-p 00000000 00:00 0 
7f4908021000-7f490c000000 ---p 00000000 00:00 0 
7f490ce52000-7f490ce5e000 r-xp 00000000 08:01 1051251                    /lib/libnss_files-2.12.1.so
7f490ce5e000-7f490d05d000 ---p 0000c000 08:01 1051251                    /lib/libnss_files-2.12.1.so
7f490d05d000-7f490d05e000 r--p 0000b000 08:01 1051251                    /lib/libnss_files-2.12.1.so
7f490d05e000-7f490d05f000 …
Run Code Online (Sandbox Code Playgroud)

c++ g++

79
推荐指数
4
解决办法
21万
查看次数

"g ++ -Wall test.cpp -o test"中的"-Wall"是做什么的?

-o更改输出文件名(我发现使用--help)

但是我找不到什么-Wall呢?

c++ g++

78
推荐指数
4
解决办法
5万
查看次数

带有指定模板参数的C++ 11 make_pair无法编译

我正在使用启用了-std = c ++ 11的g ++ 4.7(后面的一个快照).我试图编译一些现有的代码库,一个失败的案例让我感到困惑.

如果有人能解释发生了什么,我将不胜感激.

这是代码

#include <utility>
#include <iostream>
#include <vector>
#include <string>

int main ( )
{
    std::string s = "abc";

    // 1 ok
    std::pair < std::string, int > a = std::make_pair ( s, 7 );

    // 2 error on the next line
    std::pair < std::string, int > b = std::make_pair < std::string, int > ( s, 7 );

    // 3 ok
    std::pair < std::string, int > d = std::pair < std::string, int > ( …
Run Code Online (Sandbox Code Playgroud)

c++ templates g++ rvalue-reference c++11

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

gcc/g ++和cc1/cc1plus有什么区别?

当我编译我的项目,并检查运行所使用的资源top,最大的CPU /内存猪有时被称为g++有时cc1plus.这两者有什么区别,我应该cc1plus直接打电话吗?

gcc g++

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

在C++中的类声明中初始化const成员

在PHP和C#中,常量可以在声明时初始化:

class Calendar3
{
    const int value1 = 12;
    const double value2 = 0.001;
}
Run Code Online (Sandbox Code Playgroud)

我有一个仿函数的以下C++声明,它与另一个类一起使用来比较两个数学向量:

struct equal_vec
{
    bool operator() (const Vector3D& a, const Vector3D& b) const
    {
        Vector3D dist = b - a;
        return ( dist.length2() <= tolerance );
    }

    static const float tolerance = 0.001;
};
Run Code Online (Sandbox Code Playgroud)

这个代码编译没有问题与g ++.现在在C++ 0x模式(-std = c ++ 0x)中,g ++编译器输出一条错误消息:

错误:'constexpr'需要对非整数类型的静态数据成员'容差'进行类内初始化

我知道我可以static const在类定义之外定义和初始化该成员.此外,可以在构造函数的初始化列表中初始化非静态常量数据成员.

但有没有办法在类声明中初始化一个常量,就像在PHP或C#中可能的那样?

更新

我使用static关键字只是因为可以在g ++中的类声明中初始化这些常量.我只需要一种方法来初始化类声明中的常量,无论它是否声明static.

c++ g++

74
推荐指数
3
解决办法
7万
查看次数

如何指示GCC在5次错误后停止?

是否有可能指示GNU c ++编译器在发现5个错误后停止?在文档中找不到这个.提前致谢.

c++ gcc g++

73
推荐指数
3
解决办法
2万
查看次数

链接错误"未定义引用`__gxx_personality_v0'"和g ++

可能重复:
链接上的未定义符号___gxx_personality_v0

我有以下程序的问题.

// fkt.cpp

#include "fkt.h"

int add2(int a, int b)
{
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

标题:

// fkt.h

int add2(int a, int b);
Run Code Online (Sandbox Code Playgroud)

现在我编译它:

g++ -c fkt.cpp
Run Code Online (Sandbox Code Playgroud)

现在我跑了nm,得到:

00000000 T _Z6add2ii
         U __gxx_personality_v0
Run Code Online (Sandbox Code Playgroud)

当我想在任何地方使用该函数时:

(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?(我正在使用Ubuntu Linux.)

c++ g++

73
推荐指数
2
解决办法
15万
查看次数

如何查看目标文件中的符号?

如何查看.o文件中的符号?nm对我不起作用.我用g ++/linux.

c++ linux g++ object-files

72
推荐指数
4
解决办法
7万
查看次数

用g ++编译的奇怪代码

以下代码使用g ++ 4.8.1成功编译:

int main()
{
    int(*)();
}
Run Code Online (Sandbox Code Playgroud)

它看起来像一个函数指针的简单声明:

int(*f)();
Run Code Online (Sandbox Code Playgroud)

它不能用clang 3.4和vc ++ 2013编译.

它是编译器错误还是标准的黑暗之处?


使用g ++ 4.8.1编译好的类似奇怪代码的列表(更新):

  1. int(*)();

  2. int(*);

  3. int(*){};

  4. int(*());

这些奇怪的代码片段的实例.

更新1: @Ali在评论中添加了一些有趣的信息:

所有4个案例都使用clang 3.5 trunk(202594)进行编译错误,并使用gcc 4.9 trunk(20140302)进行编译.行为是一样的-std=c++98 -pedantic,除了int(*){};可以理解的; 扩展初始化程序列表仅适用于-std=c++11.

更新2:正如@CantChooseUsernames他的回答中指出的那样,即使没有任何启用的优化,即使初始化它们仍然可以正常编译并且没有为它们生成汇编(无论是否初始化):

  1. int(*)() = 0;

  2. int(*) = 0;

  3. int(*){} = 0;

  4. int(*()) = 0;

带初始化的实例.

更新3:我真的很惊讶地发现int(*)() = "Hello, world!";编译也很好(int(*p)() = "Hello, world!";当然不会编译).

更新4:太棒了但int(*){} = Hello, world!;编译得很好.而下面的怪异之极的一段代码,也:int(*){}() …

c++ gcc g++ c++11

70
推荐指数
3
解决办法
3858
查看次数