我正在尝试在makefile中执行此操作,但它失败的可能性非常大:
M_ARCH := $(shell g++ -dumpmachine | awk '{split($1,a,"-");print a[1]}')
Run Code Online (Sandbox Code Playgroud)
你知道为什么吗?我想它与逃避有关,但是在哪里和哪里?
我得到的这个奇怪的错误是什么?我在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) -o更改输出文件名(我发现使用--help)
但是我找不到什么-Wall呢?
我正在使用启用了-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) 当我编译我的项目,并检查运行所使用的资源top,最大的CPU /内存猪有时被称为g++有时cc1plus.这两者有什么区别,我应该cc1plus直接打电话吗?
在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.
我有以下程序的问题.
// 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.)
以下代码使用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编译.
它是编译器错误还是标准的黑暗之处?
int(*)();
int(*);
int(*){};
int(*());
更新1: @Ali在评论中添加了一些有趣的信息:
所有4个案例都使用clang 3.5 trunk(202594)进行编译错误,并使用gcc 4.9 trunk(20140302)进行编译.行为是一样的
-std=c++98 -pedantic,除了int(*){};可以理解的; 扩展初始化程序列表仅适用于-std=c++11.
更新2:正如@CantChooseUsernames在他的回答中指出的那样,即使没有任何启用的优化,即使初始化它们仍然可以正常编译并且没有为它们生成汇编(无论是否初始化):
int(*)() = 0;
int(*) = 0;
int(*){} = 0;
int(*()) = 0;
更新3:我真的很惊讶地发现int(*)() = "Hello, world!";编译也很好(int(*p)() = "Hello, world!";当然不会编译).
更新4:太棒了但int(*){} = Hello, world!;编译得很好.而下面的怪异之极的一段代码,也:int(*){}() …