Articles of gcc

如何避免简单的“字符”的海湾合作委员会警告:“无符号字符”或“签名字符”转换?

我的默认chartypes是在gcc选项(-funsigned-char gcc)中设置的“unsigned char”。 所以可以说,当我需要代码中的“无符号字符”时,我可以使用“char”。 但我得到(char *)和(unsigned char *或signed char *)之间的转换警告: "error: pointer targets in passing argument 1 of 'test2' differ in signedness" 。 当我将unsigned char *variables传递给char时,我该如何避免警告(知道我的系统具有由编译器选项设置的默认无符号字符)? static void test2(char* a) //char is unsigned by deafult as set by -funsigned-char gcc option { } void test1(void) { // This passes, but if i change it to […]

使用CUDA 6.0的C ++ 11标准

我想在我的CUDA 6.0项目中为我的C ++文件使用C ++ 11标准。 当我将CUDA 6.0 Nsight Eclipse设置中的编译器更改为g ++并添加-std=c++11选项时,我收到了很多像这样的错误: error: namespace "std::__gnu_cxx" has no member "__normal_iterator" 显然,我必须为CUDA“select”一次编译器,然后再select我的C ++文件。 我该怎么做? 安装支持未公开的C ++ 11的CUDA 6.5不是一个选项。

/usr/lib64/libstdc++.so.6:未find版本`GLIBCXX_3.4.15'

我正在尝试运行appiumtesting。 但是我得到错误说什么: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found 我正在使用RedHat6.6。 当我运行: strings /usr/lib/libstdc++.so.6 | grep GLIBC 我得到这个: GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBC_2.0 GLIBC_2.3 GLIBC_2.4 GLIBC_2.1 GLIBC_2.1.3 GLIBC_2.3.2 GLIBC_2.2 GLIBCXX_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH 是否有可能为RedHat6.6获得GLIBCXX_3.4.15?

在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) […]