标签: compiler-flags

将'const'作为'this'参数传递错误

我很久以来就遇到了错误,接下来,我正在学习,我想我不明白这个错误.

 droid.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Droid&)’: 

droid.cpp:94:30: error: passing ‘const Droid’ as ‘this’ argument of ‘std::string 

Droid::getId()’ discards qualifiers
 [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

第94行:

std::ostream&   operator<<(std::ostream &os, Droid const & a)
    os << "Droid '" << a.getId() << "', " << *a.getStatus() << ", " << a.getEnergy() << std::endl;
Run Code Online (Sandbox Code Playgroud)

和听众:

std::string   getId();
Run Code Online (Sandbox Code Playgroud)

我对"operator <<",a.getId,a.getStatus,a.getEnergy中的3个调用有相同的错误.

有人可以向我解释一下编译器在说什么吗?

c++ g++ compiler-flags

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

为什么我得到"nvcc致命:重新定义论证'优化'"?

我试图在MacBook Pro Retina上使用CUDA驱动程序版本:7.0.36和cuda toolkit 7.0在nVidia GT 750 M中编译,以下代码及其makefile但是它给了我这个错误:

nvcc致命:重新定义参数'optimize'.

尽管我已经能够用nvcc编译和执行其他程序,但是使用makefile等,现在我不是.

此外,我还没有找到关于这个错误的有用的东西所以我在这里问它是否有人知道如何解决它.我是CUDA的新手,所以如果您需要更多信息,请索取.

这是我的Makefile.inc:

CXX             := nvcc
OPTIM           := -O3
DEBUG           := -g -DOLB_DEBUG
CXXFLAGS        := $(OPTIM)
ARPRG           := ar
LDFLAGS         := -O3
PARALLEL_MODE   := OFF
OMPFLAGS        := -fopenmp
BUILDTYPE       := precompiled
INPUTDIR        := ./input
OUTPUTDIR       := ./output
INCDIR          := ./inc
OBJDIR          := ./obj
SRCDIR          := ./HeatTransfer
BINDIR          := ./bin
###########################################################################
## defines shell
SHELL           := /bin/sh
Run Code Online (Sandbox Code Playgroud)

Makefile:

###########################################################################
ROOT := .
include $(ROOT)/Makefile.inc
######################################################## Operational system
OS …
Run Code Online (Sandbox Code Playgroud)

optimization cuda compiler-errors compiler-flags nvcc

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

gcc 标志重复和顺序重要吗?

在为 python 构建 C 扩展时,我看到一些gcc重复的标志。当我跑步时:

python setup.py build_ext
Run Code Online (Sandbox Code Playgroud)

正在运行的构建命令如下所示:

gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong -fno-plt -flto=4 -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong -fno-plt -march=x86-64 -mtune=generic -O3 -pipe -fstack-protector-strong -fno-plt -fPIC -I/usr/include/python3.7m -c /tmp/src/source.c -o build/temp.linux-x86_64-3.7/tmp/src/source.o
gcc -pthread -shared -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -flto=4 -fuse-linker-plugin -ffat-lto-objects -flto-partition=none -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now build/temp.linux-x86_64-3.7/tmp/src/source.o -L/usr/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/source.cpython-37m-x86_64-linux-gnu.so
Run Code Online (Sandbox Code Playgroud)

好吧,那是一篇很长的文章。但是,正如您所看到的,一些标志是重复的。这是第一个命令中的重复:

  • -O3重复4次。
  • -fno-plt重复3次。
  • -fstack-protector-strong重复3次。
  • -march=x86-64重复3次。
  • -mtune=generic重复3次。
  • -pipe重复3次。

除了-Wl,...传递给链接器的标志之外,这些标志的重复和排序还有什么意义吗?

gcc compiler-flags

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

如何通过Qt项目文件将命令的输出作为编译器标志传递?

我正在尝试将"git describe"的输出添加到我的应用程序的about窗口中,因此更容易找出人们使用的应用程序版本.

我可以通过添加以下编译器标志来实现:-DAPP_VERSION ="$(git describe HEAD)"

但由于该项目基于qmake,我想找到一种方法将其放入Qt项目文件中.这可能吗?如果是这样,怎么样?

编辑:我尝试添加以下内容:

QMAKE_CXXFLAGS + = -DAPP_VERSION ="$(git describe HEAD)"

但它只是给了我"-DAPP_VERSION =",所以我想我必须使用一些转义字符,但我不知道哪些和哪里.:/

qt qmake compiler-flags

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

如何使GCC实例化一个具有非平凡const/dest的类实例?

我正在实施一个分析器.我想使用构造函数/析构函数来跟踪我何时进入/退出函数.

我的代码粗略概述如下:

class Profile
{
   Profile(void);   //Start timing
  ~Profile(void);   //Stop timer and log
};
//...
Game::Game(void) : m_Quit(false)
{
  Profile p();
  InitalizeModules();
  //...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,不会调用构造函数和析构函数.即使我反汇编,也没有对Profile :: Profile()的引用.我知道该标准指定编译器无法优化具有非平凡构造函数的实例.

编译器或链接器的命令行上没有优化标志.

我也试过指定属性((used)),但无济于事.

这是反汇编:

(gdb) disassemble Ztk::Game::Game
Dump of assembler code for function Ztk::Game::Game():
   0x00000000004cd798 <+0>:     push   %rbp
   0x00000000004cd799 <+1>:     mov    %rsp,%rbp
   0x00000000004cd79c <+4>:     push   %r12
   0x00000000004cd79e <+6>:     push   %rbx
   0x00000000004cd79f <+7>:     sub    $0x30,%rsp
   0x00000000004cd7a3 <+11>:    mov    %rdi,-0x38(%rbp)
   0x00000000004cd7a7 <+15>:    mov    -0x38(%rbp),%rax
   0x00000000004cd7ab <+19>:    mov    %rax,%rdi
   0x00000000004cd7ae <+22>:    callq  0x4cdc6a <Ztk::Highlander<Ztk::Game, int>::Highlander()> …
Run Code Online (Sandbox Code Playgroud)

c++ optimization gcc constructor compiler-flags

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

Xcode 4.4 - 无法为编译源添加编译器标志

在Xcode 4.4中,我似乎无法将编译器标志添加到单个源文件中.我试图从单个文件中删除ARC,但我无法弹出添加标志.双击或选择项目并按Enter键不起作用,也尝试选择多个并按下输入不起作用.我尝试过两个独立的项目,其中一个是我用Xcode 4.4创建的.是否有另一种手动将编译器标志添加到源文件的方法?(我没有旧版本的Xcode来查看它如何存储值[可能在pbxproj中]).

注意:MacBook Pro带Retina显示屏 - OSX 10.8

xcode objective-c compiler-flags automatic-ref-counting

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

将常量数传递给size_t*参数时,gcc不会发出警告

我的代码是这样的:

#define ZERO_CONSTANT 0
foo(size_t * p_size);

foo(ZERO_CONSTANT); //Doesn't warn
Run Code Online (Sandbox Code Playgroud)

哪个gcc标志会拨打电话foo(ZERO_CONSTANT)进行警告?

c gcc compiler-flags compiler-warnings

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

如何在没有GADT或数据类型上下文的情况下定义List的Eq实例

我在用Glasgow Haskell Compiler, Version 7.8.3, stage 2 booted by GHC version 7.6.3.

我试图在Haskell中对List类型使用以下数据定义:

data Eq a => List a = Nil | Cons a (List a)
Run Code Online (Sandbox Code Playgroud)

但是,-XDatatypeContexts默认情况下,该标志是必需的,已删除的,甚至是从语言中删除的.它被广泛视为语言的错误.我也不想为List的定义使用特殊标志,因为我试图复制现有列表类型的功能.然后我能够使用以下代码段:

data List a where
 Nil :: List a
 Cons :: Eq a => a -> List a -> List a
Run Code Online (Sandbox Code Playgroud)

它运行正常.这个解决方案的明显问题是现在我需要使用-XGADTs标志,在这种情况下我仍然不想依赖它,因为内置版本的列表不需要运行.有没有办法限制其中的类型Cons,Eq a以便我可以比较两个列表,而无需编译器标志和不使用derived关键字?其余代码如下:

instance Eq (List a) where
 (Cons a b) == (Cons c d) = (a == c) && (b == …
Run Code Online (Sandbox Code Playgroud)

haskell list compiler-flags algebraic-data-types gadt

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

如何使用依赖于符号调试的参数定义函数?

我用-D编译器选项定义了一个符号debug:-DDEBUG_VALUE我是一个函数,其中一个参数的存在取决于符号调试标志的定义或更少.

即如果我定义了DEBUG_VALUE

my_function(int parameter1  ,int  my_parameter_dependant)
Run Code Online (Sandbox Code Playgroud)

除此以外

my_function(int parameter1)
Run Code Online (Sandbox Code Playgroud)

通过这种方式

my_function(int parameter1  #ifdef DEBUG_VALUE , int my_parameter_dependant #endif)
Run Code Online (Sandbox Code Playgroud)

我明白了

 error: stray ‘#’ in program
 error: expected ‘,’ or ‘...’ before ‘ifdef’
Run Code Online (Sandbox Code Playgroud)

我怎么解决?提前致谢!

(我在Unix系统上使用C++编译器)

c++ compiler-errors compiler-flags compiler-options c++11

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

在iOS Swift中启用堆栈金丝雀

我一直在寻找一种快速为我的ios应用程序启用堆栈金丝雀的方法,但是后来我发现最新版本的xcode具有默认启用启用堆栈金丝雀所需的标志。因此,然后我正在寻找一种方法来确保启用堆栈金丝雀,正如其他站点所说,我尝试在终端机中使用otool命令($ otool -Iv appName | grep stack_chk)来确保它并期望它返回'stack_chk_guard和stack_chk_fail'标志,但未返回任何值/标志。因此,我然后尝试在“其他C标志”下手动设置标志“ -fstack-protector-all”,但仍然无法通过otool命令看到标志。

在此处输入图片说明

我在这里想念什么?还是我误解了什么?如何确保自己为应用程序启用了堆栈金丝雀?

compiler-flags penetration-testing ios stack-smash

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