Articles of gcc

在gcc中禁用可变长度的自动数组

即使使用-std=c89标志,我也无法禁用它。 我怎样才能禁用它?

关于Linux的二进制兼容性

如果我得到一些由Ubuntu构build的C ++代码,比如Ubuntu上的GCC 4.8,代码没有GUI /接口,只调用标准的Linux库,那么可以在RHEL 5/6上运行的二进制文件,完美无瑕的GCC?

Clang / GCC真的支持延迟加载function吗?

如果您真的体验过与上述标题相关的内容,您是否愿意留下您的评论? 我试图做一个共享对象延迟加载与Clang和GCC在Ubuntu上(我其实不介意使用哪个编译器),但他们看起来不是真的支持任何延迟加载function(我期望延迟加载function把一个存根放到一个父对象中,这个父对象试图按需要加载另一个对象,此时需要这个function,但实际上并没有)。 以下命令显示我试图将libbar.so延迟加载到libfoo.so: clang bar.c -fPIC -shared -o libbar.so clang foo.c -Wl,-zlazy,lL'/path/to/where/lib/is',-lbar -o foo 如果libbar.so不存在,您将在input条目之前看到libfoo.so引发exception。 无论如何,我不介意上面的命令是否有错字,但是想知道Clang / GCC是否真的支持延迟加载function 。 但是就我个人而言,如果Clang / GCC不支持任何延迟加载特性,我不相信Linux程序开发者是否需要调用dlopen()或dlsym()来使共享对象延迟加载。 如果对象是用C编写的,但是如果用C ++编写的话,情况必须完全复杂: 我相信一个在编译器或链接器的帮助下实现的解决scheme是最好的,因为我已经成功地在Windows和Mac OS上完成了它。 所以我觉得这将是一个自然的反应,即使在Clang / GCC上,公民也希望拥有延迟加载function。 如果您对我的感受有任何评论,我也会很感激。 PS。 我知道Solaris支持延迟加载function,但这不是我的方式,因为我不会开发任何东西。 无论如何,非常感谢你提前。

为什么inttypes在BSS段占用8个字节,而在DATA段占用4个字节

我正在学习C程序的可执行文件的结构。 我的环境是GCC和64位英特尔处理器。 考虑下面的C代码a.cc #include <cstdlib> #include <cstdio> int x; int main(){ printf("%d\n", sizeof(x)); return 10; } size -oa显示 text data bss dec hex filename 1134 552 8 1694 69e a 我添加了另一个初始化的全局variablesy后。 int y=10; size a显示(其中a是来自a.cc的可执行文件的名称) text data bss dec hex filename 1134 556 12 1702 6a6 a 我们知道, BSS部分存储未初始化的全局variables的大小, DATA存储初始化的全局variables。 为什么int在BSS中占用8个字节? 我的代码中的sizeof(x)表明int实际上占用了4个字节。 int y=10将4个字节添加到DATA,因为int应该占用4个字节。 但是,为什么它将4个字节添加到BSS? […]

如何在启用“墙”时禁用特定的警告

我在我的Makefile中使用了-Wall -Werror ,但是我想禁用以下特定types的警告: warning: '_wrap_delete_DMXTSFILTER' defined but not used 我该怎么做?

如何在gcc内联汇编中使用全局variables

我正在尝试像这样使用内联汇编,对于全局variables,但编译器通过说明对saved_sp的未定义引用给出错误。 __asm__ __volatile__ ( "movq saved_sp, %rsp\n\t" ); saved_sp全局声明为static long saved_sp (对于一个文件)。 我在这里犯了什么错误?

为什么在_start之前调用glibc的csu / init-first.c中的_init,即使_start是ELF入口点?

我在玩GDB的rbreak .时候首先注意到了它rbreak . ,然后做了个小例子: (gdb) file hello_world.out Reading symbols from hello_world.out…done. (gdb) b _init Breakpoint 1 at 0x4003e0 (gdb) b _start Breakpoint 2 at 0x400440 (gdb) run Starting program: /home/ciro/bak/git/cpp/cheat/gdb/hello_world.out Breakpoint 1, _init (argc=1, argv=0x7fffffffd698, envp=0x7fffffffd6a8) at ../csu/init-first.c:52 52 ../csu/init-first.c: No such file or directory. (gdb) continue Continuing. Breakpoint 2, 0x0000000000400440 in _start () (gdb) […]

EC2上没有C编译器?

我一直在试图在我的EC2实例上安装Gearman,但是当我尝试./configure gearmand时,我得到这个: checking build system type… x86_64-unknown-linux-gnu checking host system type… x86_64-unknown-linux-gnu checking target system type… x86_64-unknown-linux-gnu checking for gcc… no checking for cc… no checking for cl.exe… no configure: error: in `/home/ec2-user/gearmand-1.1.3': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details 现在,奇怪的是,GCC是绝对安装的。 which gcc46 回报 /usr/bin/gcc46 但是,当我尝试运行命令“gcc”时,找不到… 我试图通过yum擦除/安装/重新安装gcc和gcc-c ++,但这似乎没有帮助。 […]

GCC构build问题(#include_next limits.h)

当我尝试 $ make depends -f gcc.mak 我的Ubuntu机器上的中间件我得到这个 /usr/include/../include/limits.h:125:26:错误:不包含要在其中searchlimits.h的path 这是limits.h的内容:125: / *获取编译器的limits.h,它定义了几乎所有的ISO常量。 我们把这个#include_next放在双重包含检查之外,因为 应该有可能包含这个文件不止一次,仍然得到 来自gcc头文件的定义。 * / #if defined __GNUC__ &&!defined _GCC_LIMITS_H_ / *`_GCC_LIMITS_H_'是GCC文件定义的。 * / #include_next <limits.h> #万一 我试着设置 $ export INCLUDE = / usr / lib / gcc / x86_64-linux-gnu / 4.3 / include-fixed / $ export C_INCLUDE_PATH = / usr / lib / […]

build立OpenCV作为静态库

也许我错过了一些东西,但我无法构buildopencv的静态库。 build立: Kubuntu 12.04 gcc 4.6.3 使3.81 2.8.7 opencv 2.4.6.1(最后一个可用的网站) 我手动完成所有工作。 我尝试用cmake-gui没有更多的成功。 我做它写的东西。 $ cmake -D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX = / usr / local -D BUILD_PYTHON_SUPPORT = ON -D WITH_QT = ON -D BUILD_SHARED_LIBRARIES = OFF .. (我也尝试了BUILD_SHARED_LIBRARIES = NO) 我得到的是(例如核心): libopencv_core.so libopencv_core.so.2.4 libopencv_core.so.2.4.6 libopencv_core_pch_dephelp.a 说实话,我期望libopencv_core.a 。 我是一个在Linux上build立包/ libs的新手。 我确定有些事我做错了,但我不知道是什么。 另外我不想使用dynamic库… 谢谢你的帮助! 编辑删除cmake命令行中的-D […]