Questions tagged «gcc»

GCC是GNU编译器集合。它是Linux上针对C,C ++,Go,Fortran和Ada的事实上的标准编译器,并且还支持许多其他语言和平台。除编译器外,GCC还具有一个工具链(libc,libstdc ++,objdump,nm等),该工具链已在多个平台和系统上广泛使用。

13
取消std :: type_info :: name的结果
我目前正在研究一些日志记录代码,这些代码除其他事项外,应该打印有关调用函数的信息。这应该是相对容易的,标准C ++有一个type_info类。这包含类型标识符的类/函数/等的名称。但它被粉碎了。这不是很有用。即typeid(std::vector<int>).name()返回St6vectorIiSaIiEE。 有没有办法从中产生有用的东西?就像std::vector<int>上面的例子一样。如果它仅适用于非模板类,那也很好。 该解决方案应该适用于gcc,但是如果我可以移植的话会更好。它是用于日志记录的,因此不能关闭它并不是很重要,但是它对调试很有帮助。
93 c++  gcc  name-mangling 

9
如何禁用我不想编辑的第三方代码中来自gcc的未使用的变量警告?
我想知道您传递给gcc编译器的哪些开关可以关闭未使用的变量警告?我在Windows上的增强功能中遇到错误,并且我不想触摸增强功能代码: C:\boost_1_52_0/boost/system/error_code.hpp: At global scope: C:\boost_1_52_0/boost/system/error_code.hpp:214:36: error: 'boost::system::posix_category' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:215:36: error: 'boost::system::errno_ecat' defined but not used [-Werror=unused-variable] C:\boost_1_52_0/boost/system/error_code.hpp:216:36: error: 'boost::system::native_ecat' defined but not used [-Werror=unused-variable] 我尝试同时使用两者-Wunused-value,-Wno-unused-value但都没有抑制上面的消息。 正确的命令是什么,这是我的编译行: g++ -g -fno-inline -Wall -Werror -Wextra -Wfloat-equal -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wno-conversion -Wdisabled-optimization -Wredundant-decls -Wunused-value -Wno-deprecated -IC:\\boost_1_52_0 -D_LARGEFILE_SOURCE …

7
如何设置cron作业以每小时运行一次可执行文件?
我需要设置一个cron作业,每小时运行一次使用gcc编译的可执行文件。 我以root身份登录并输入 crontab -e 然后输入以下内容并保存文件。 0 * * * * /path_to_executable 但是,cron作业不起作用。 我看到当我输入/...path_to_executable文字时会遇到细分错误。我只能从可执行文件所在的文件夹中执行该可执行文件。有什么办法可以解决此问题?
92 c  linux  gcc  cron  crontab 

6
带有GCC的预编译头文件
任何人都可以使用GCC预编译头文件取得成功吗?我的尝试没有运气,我也没有看到很多关于如何设置它的好例子。我已经尝试过cygwin gcc 3.4.4,并在Ubuntu上使用4.0。

9
如何让Makefile自动重建包含修改后的头文件的源文件?(在C / C ++中)
我使用以下makefile来构建正在使用的程序(实际上是内核)。它是从头开始的,我正在学习该过程,所以它并不完美,但是对于我自己编写makefile的经验水平,我认为它现在足够强大。 AS = nasm CC = gcc LD = ld TARGET = core BUILD = build SOURCES = source INCLUDE = include ASM = assembly VPATH = $(SOURCES) CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions \ -nostdinc -fno-builtin -I $(INCLUDE) ASFLAGS = -f elf #CFILES = core.c consoleio.c system.c CFILES …

3
<random>在Linux中生成相同的数字,但在Windows中生成相同的数字
下面的代码用于在间隔[1,100]中生成五个伪随机数的列表。我为default_random_enginewith设置了种子time(0),它以unix时间返回系统时间。当我使用Microsoft Visual Studio 2013在Windows 7上编译并运行该程序时,它会按预期运行(请参阅下文)。但是,当我在Arch Linux中使用g ++编译器执行此操作时,它的行为就很奇怪。 在Linux中,每次将生成5个数字。每次执行后4个数字将有所不同(通常是这样),但第一个数字将保持不变。 Windows和Linux上5次执行的示例输出: | Windows: | Linux: --------------------------------------- Run 1 | 54,01,91,73,68 | 25,38,40,42,21 Run 2 | 46,24,16,93,82 | 25,78,66,80,81 Run 3 | 86,36,33,63,05 | 25,17,93,17,40 Run 4 | 75,79,66,23,84 | 25,70,95,01,54 Run 5 | 64,36,32,44,85 | 25,09,22,38,13 更令人迷惑的是,在Linux上,第一个数字会定期增加一个。获得上述输出后,我等待了大约30分钟,然后再次尝试发现第一个数字已更改,现在始终生成为26。它一直定期递增1,现在为32。它似乎对应随着价值的变化time(0)。 为什么第一个数字在每次运行中很少改变,然后又增加1? 代码。它整齐地打印出5个数字和系统时间: #include &lt;iostream&gt; #include …

5
静态链接libstdc ++:有陷阱吗?
我需要将基于GCC 4.7的libstdc ++的,在Ubuntu 12.10上构建的C ++应用程序部署到运行Ubuntu 10.04的系统,该系统随附相当老的libstdc ++版本。 目前,我正在-static-libstdc++ -static-libgcc按照此博客文章的建议进行编译:静态链接libstdc ++。作者警告不要在静态编译libstdc ++时使用任何动态加载的C ++代码,这是我尚未检查的事情。尽管如此,到目前为止一切似乎都进展顺利:我可以在Ubuntu 10.04上使用C ++ 11功能。 我注意到这篇文章是从2005年开始的,此后也许已经发生了很大的变化。它的建议仍然有效吗?有没有我应该注意的潜伏问题?

5
GCC致命错误:stdio.h:没有这样的文件或目录
我正在尝试使用GCC 4.9(实验性)在OS X 10.9上的C语言中编译程序。出于某种原因,在编译时出现以下错误: gcc: fatal error: stdio.h: No such file or directory 然后,我尝试了一个简单的Hello World程序: #include &lt;stdio.h&gt; int main(int argc, const char *argv[]) { printf("Hello, world!"); return 0; } 同样,在运行时gcc -o ~/hello ~/hello.c,我遇到了同样的错误。我正在使用的实验版本gcc,但是似乎不可能发行一个在导入时产生错误的版本stdio。是什么导致此问题,如何解决?
90 c  gcc  stdio 

6
建立OSX应用程式套件
假设我已经制作了一个不使用Xcode的osX应用程序。用GCC编译后,我得到了一个链接到其他几个库的可执行文件。其中一些库可能会再次动态链接到其他非标准系统库 是否有任何工具可以通过首先制作所需的目录结构,然后递归地复制/检查/修复链接以确保所有动态依赖项也包含在应用程序包中来制作OSX应用程序包? 我想我可以尝试编写类似的内容,但是我想知道是否已经存在这样的内容。
90 macos  gcc  otool 

5
gcc -ggdb和gcc -g有什么区别
当我使用gcc编译C程序时,通常会使用-g一些调试信息到elf文件中,以便gdb在需要时可以为我提供帮助。 但是,我注意到有些程序使用-ggdb,因为它应该使调试信息更加友好gdb。 它们有何不同?建议使用哪种? 注:链接的选项,调试程序或GCC,http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
90 gcc  gdb 

4
用G ++编译多线程代码
我有史以来最简单的代码: #include &lt;iostream&gt; #include &lt;thread&gt; void worker() { std::cout &lt;&lt; "another thread"; } int main() { std::thread t(worker); std::cout &lt;&lt; "main thread" &lt;&lt; std::endl; t.join(); return 0; } 尽管我仍然无法编译g++运行它。 更多细节: $ g++ --version g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the …
89 c++  linux  ubuntu  gcc  g++ 

4
“易失性”的定义是易失性的,还是GCC存在一些标准合规性问题?
我需要一个函数(例如WinAPI中的SecureZeroMemory)始终将内存归零,并且不会被优化,即使编译器认为此后再也不会访问内存了。似乎是挥发物的理想选择。但是我在将其与GCC一起使用时遇到了一些问题。这是一个示例函数: void volatileZeroMemory(volatile void* ptr, unsigned long long size) { volatile unsigned char* bytePtr = (volatile unsigned char*)ptr; while (size--) { *bytePtr++ = 0; } } 很简单。但是,如果您调用GCC实际生成的代码,则随着编译器版本以及您实际上试图将其设置为零的字节数而大不相同。https://godbolt.org/g/cMaQm2 GCC 4.4.7和4.5.3永远不会忽略挥发物。 对于数组大小1、2和4,GCC 4.6.4和4.7.3忽略了volatile。 GCC 4.8.1至4.9.2会忽略数组大小1和2的volatile。 GCC 5.1直到5.3会忽略数组大小1、2、4、8的volatile 对于任何数组大小(一致性的加分点),GCC 6.1都将忽略它。 我测试过的任何其他编译器(clang,icc,vc)都可以生成期望的存储,并且具有任何编译器版本和任何数组大小。所以在这一点上,我想知道,这是一个(相当老而严重的)GCC编译器错误,还是该标准中的volatile定义不精确地表明这实际上是符合规范的行为,因此根本不可能编写可移植的“ SecureZeroMemory”功能? 编辑:一些有趣的观察。 #include &lt;cstddef&gt; #include &lt;cstdint&gt; #include &lt;cstring&gt; #include &lt;atomic&gt; void callMeMaybe(char* …
89 c++  c  gcc  standards 

1
-rpath和-L有什么区别?
gcc并ld提供了多种方法来指定库的搜索路径--rpath和-L标志。手册页没有显示这两个标志之间的差异,实际上是说每个标志都在库搜索路径中添加了一个库。但是,两个标志都做完全相同的事情似乎很奇怪。这两个选项之间有什么区别(如果有)?

4
堆栈变量是否由GCC __attribute __((aligned(x)))对齐?
我有以下代码: #include &lt;stdio.h&gt; int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &amp;a[0], &amp;a[1], &amp;a[2], &amp;a[3]); } 我有以下输出: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac 为什么地址a[0]不是的倍数0x1000? 到底__attribute__((aligned(x)))是什么?我误解了这个解释吗? 我正在使用gcc 4.1.2。

2
模板类成员函数的显式专业化
我需要专门针对某种类型的模板成员函数(比方说double)。当类X本身不是模板类时,它可以正常工作,但是当我使它成为模板时,GCC开始给出编译时错误。 #include &lt;iostream&gt; #include &lt;cmath&gt; template &lt;class C&gt; class X { public: template &lt;class T&gt; void get_as(); }; template &lt;class C&gt; void X&lt;C&gt;::get_as&lt;double&gt;() { } int main() { X&lt;int&gt; x; x.get_as(); } 这是错误消息 source.cpp:11:27: error: template-id 'get_as&lt;double&gt;' in declaration of primary template source.cpp:11:6: error: prototype for 'void X&lt;C&gt;::get_as()' does not …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.