草庐IT

c++ - 如何使用#pragma 在 G++ 中启用优化

我想在没有命令行参数的情况下在g++中启用优化。我知道GCC可以通过在我的代码中编写#pragmaGCCoptimize(2)来做到这一点。但它似乎不适用于G++。此页面可能有帮助:http://gcc.gnu.org/onlinedocs/gcc/Function-Specific-Option-Pragmas.html我的编译器版本:$g++--versiong++(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1$gcc--versiongcc(Ubuntu/Linaro4.6.1-9ubuntu3)4.6.1我写了一些这样的代码:#pragmaGCCoptim

c++ - G++ & Clang++ - 命名空间 std _GLIBCXX_VISIBILITY(默认)

我正在尝试使用clang++编译我的C++代码,但不断收到与namespace冲突的错误。我的main.cpp文件是一个简单的HelloWorld程序(用于调试)。我感觉问题出在我在集群上编译的GCC或clang版本上。关于如何追查这个问题的任何想法?或故障排除步骤?[aebrenne@hpcsrc]$gcc-vUsingbuilt-inspecs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/data/apps/gcc/4.8.1/libexec/gcc/x86_64-unknown-linux-gnu/4.8.1/lto-wrapperTarget:x86

c++ - 如何使用带代码块的 G++ 为 64 位编译?

我目前正在创建一个共享库DLL,但我需要在运行时在64位环境中加载它,因此它目前无法运行。如何使用g++从代码块编译64位dll?我尝试过像-m64这样的编译器选项,但似乎都不起作用。 最佳答案 要使用g++在Windows上编译64位程序,您需要MinGW64.我相信Code::Blocks随MinGW32一起提供。要将其安装到Code::Blocks上,请将zip文件解压到一个没有空格的文件夹中,例如C:\MinGW64打开Code::Blocks并点击设置->编译器和调试器。在选定的编译器下,单击复制。在下一个框中,键入“Mi

c++ - 分发使用 MinGW g++ 编译的程序

假设我使用MinGW64(g++编译器)创建并编译了一个简单的程序。在我的计算机上运行此程序并在ProcessExplorer中查找程序正在使用的DLL文件,我发现(以及许多其他文件):libgcc_s_seh-1.dlllibstdc++6.dlllibwinpthread-1.dll这些是唯一位于我的MinGW安装文件夹下的。使用的其余DLL文件位于C:\Windows下。问题1:MinGWDLL文件是MinGWC++运行时库(可以这么说)吗?它们的用途是否与例如msvcrXXX.dll(XXX=Microsoft运行时库的版本)相同。问题2:如果我想在另一台没有安装MinGW的计

c++ - 我如何从 g++ 中获取缺少原型(prototype)的警告?

我目前有一个项目使用g++来编译它的代码。我正在清理代码,我想确保所有函数都有原型(prototype),以确保正确处理诸如constchar*之类的事情。不幸的是,当我尝试指定-Wmissing-prototypes时,g++会提示:g++-Wmissing-prototypes-Wall-Werror-cfoo.cppcc1plus:warning:commandlineoption"-Wmissing-prototypes"isvalidforAda/C/ObjCbutnotforC++谁能告诉我:1)为什么gcc这无效?这是gcc中的错误吗?2)有没有办法打开这个警告?编辑:这

c++ - "-dndebug"(小写)在 g++ 中有什么作用吗?

我正在对使用400行Linux的多平台C++项目进行细微更改makefile几年前别人创造的。makefile中有两行使用-dndebug(小写)作为g++的命令行参数。我认为其目的是定义ndebug符号,但是当它是小写时,该参数甚至会做任何事情吗?我对g++和Make知之甚少,但是,翻页OptionsControllingthePreprocessor,我认为参数需要大写才能起作用。 最佳答案 是的,应该是像这样的大写-DNDEBUG。-D是定义宏的GCC选项。NDEBUG是要定义的宏,以关闭C标准规定的断言。Ihaveminim

c++ - 如何诊断 g++ 4.3.4 中对 sqrt(int&) 的模糊调用

我的代码如下:#include#includefloatfoo(floatf){std::cout即使使用-pedantic-std=c++98-Wall-Wextra也不会报告最后一行中的调用不明确,但它不一定在其他编译器中工作,因为同样的原因foo(i)没有。gcc将以下内容添加到命名空间std:templateinlinetypename__gnu_cxx::__enable_if::__value,double>::__typesqrt(_Tp__x){return__builtin_sqrt(__x);}也就是说,它为所有整数类型X添加了inlinedoublesqrt(X)

c++ - 类型转换对的 g++ 警告选项?

我刚刚发现C++不会对从pair进行转换给出任何警告至pair,这有点令人惊讶。这是我的程序test_pair.cpp:#include#includeusingnamespacestd;intmain(){std::vector>v;pairp=make_pair(3.8,3);v.push_back(p);}我使用g++test_type.cpp-Wall-Wconversion编译它,但仍然没有生成警告。我正在使用g++v4.6.1。任何人都知道如何让g++为此生成警告,或者它无法完成? 最佳答案 对(和元组)几乎可以从任何适

c++ - 函数指针的模板参数推导(g++ & ICC vs Clang++ & VC++)

考虑以下程序:#includetemplatevoidfoo(constT*x){x();}voidbar(){std::cout它在clang++和VC++上编译良好,但g++给出以下编译器错误(参见现场演示here)main.cpp:Infunction'intmain()':main.cpp:10:9:error:nomatchingfunctionforcallto'foo(void(&)())'foo(bar);^main.cpp:3:6:note:candidate:templatevoidfoo(constT*)voidfoo(constT*x){^~~main.cpp:

c++ - g++ 编译错误

我是Ubuntu的新手。我试图编译一个简单的“HelloWorld!”Ubuntu11.04中的c++代码,带有该代码(在终端中):gcc-Wall-W-Werrortex.cpp-otex.但是编译器返回了很多错误:/tmp/ccL8c1p8.o:Infunction`main':tex.cpp:(.text+0xa):undefinedreferenceto`std::cout'tex.cpp:(.text+0xf):undefinedreferenceto`std::basic_ostream>&std::operator>(std::basic_ostream>&,charco