Articles of gcc

当编译不同的程序时,sizeof返回一个结构体的不同值

我有2个程序共享一个头文件。 这个头文件定义了几个成员的结构。 然后是#define: #define STRUCTURE_SIZE sizeof(OUR_STRUCTURE) 。 然后将此结构用于共享内存中,其中STRUCTURE_SIZE用于shmget()的size参数。 不幸的是,对于一个程序,STRUCTURE_SIZE最终为20758,而另一个程序最终为20764.因此,当第二个程序试图获取共享内存时, shmget()返回EINVAL。 uname -a : Linux machine 2.6.30.10-105.2.23.fc11.i686.PAE #1 SMP Thu Feb 11 07:05:37 UTC 2010 i686 i686 i386 GNU/Linux g++ –version : g++ (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)

如何避免不能使用命名空间std; 在C ++中

我在尝试将我的C ++源代码从HP-UX移植到Linux时遇到了此问题。 当我尝试在Linux上编译C ++源代码时,会发生什么,它抱怨组件(来自标准C ++库)不存在。 放置行使用名称空间标准; 在源代码的顶部似乎解决了这个问题。 当我尝试重新编译HP-UX上的代码时,aCC编译器会抱怨只有命名空间名称在这里有效(它不认为是有效的命名空间)。 我想知道是否有办法解决这个问题,以便源代码与HP-UX的长期弃用的C ++编译器和LINUX的GCC编译器二进制兼容。

在同一个系统上有多个GCC的情况下使用哪个版本的libstdc ++。so

我正试图安装gcc 4.8安装和使用当前gcc 4.3系统。 我做了一些研究,知道可以保留多个版本的gcc。 对我来说,使用–program-suffix =选项对我来说是最好的解决scheme。 但我的问题是,我可以安装新的gcc 4.8直接到旧gcc安装的地方? 两个版本的库可以混合在同一个lib目录中吗? 更多细节:旧的gcc安装在/ usr / bin / usr / lib64中。 如果我直接安装新的gcc到相同的位置,新的库也将被安装/ usr / lib64。 这是一个问题吗? gcc编译器知道链接时使用哪个库? 提前谢谢了!

C ++错误:睡眠没有在此范围内声明

我在Ubuntu中使用C ++代码块,在GCC 4.7中增加1.46 [yield_k.hpp] 我得到这个编译时间错误: error : Sleep was not declared in this scope 码: #include <iostream> using namespace std; int main() { cout << "nitrate"; cout << flush; sleep(1000); cout << "firtilizers"; return 0; } 我该如何解决这个错误? 我想要程序挂起1秒钟。

在Windows上使用MingW的ccache

我正在尝试使用ccache,但是当我尝试编译我的项目时出现这个错误: ccache:致命:无法确定caching目录 我从这里下载文件,我怎样才能知道ccache使用的相应目录。

如何在gcc上使用ubsan(windows 8.1)

为了更好地保护UB案件,例如: #include <stdio.h> int f(){ int x; return x; } int main() { f(); while(1); return 0; } 我今天更新了GCC,所以我可以使用ubsan 。 根据gcc –version我目前的版本是5.3.0。 我认为这个更新会增加ubsan,但是看起来这不是因为用C:\Users\my_name\Desktop>gcc -fsanitize=undefined ac这就是我得到的: c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../ mingw32 / bin / ld.exe:can not fin d -lubsan 现在,我已经看到这个post,但操作系统是Ubuntu 15.04 ,我使用Win 8.1所以没有帮助我。 其中一个评论说: 您需要安装libubsan软件包。 但我不知道这是否意味着windows/ubuntu ,即使是windows用户,我不知道该怎么做。 编辑:我也试着编译gcc -fno-sanitize=all ac (这里有很多选项),而且这个编译没有任何警告,所以我猜GCC以某种方式识别杀毒软件(因为它编译成功),但是拒绝我的原始编译尝试一些原因

如何让更多的内存和避免堆栈溢出大量的recursion?

我正在testing执行大量recursion调用的algorithm的时间。 我的程序在约128k的recursion调用中死亡,这只需要0.05秒。 我想让更多的记忆在我的分析中有更长的时间。 我正在运行Linux和使用gcc。 是否有一个系统调用,或环境variables,或gcc标志,或包装,或什么?

使用dlopen和dlsym使用-fPIC编译C程序

我有一个错误的符号parsing的问题。 我的主程序用dlsym加载了一个dlopen共享库和一个来自它的符号。 程序和库都是用C库代码编写的 int a(int b) { return b+1; } int c(int d) { return a(d)+1; } 为了使它在64位机器上工作,-fPIC在编译时传递给gcc。 该计划是: #include <dlfcn.h> #include <stdio.h> int (*a)(int b); int (*c)(int d); int main() { void* lib=dlopen("./libtest.so",RTLD_LAZY); a=dlsym(lib,"a"); c=dlsym(lib,"c"); int d = c(6); int b = a(5); printf("b is %dd is %d\n",b,d); return 0; } 如果程序不是用-fPIC编译的话,一切运行正常,但是当用-fPIC编译程序时,程序崩溃时会出现分段错误。 调查发现,坠机是由于符号a的错误parsing。 当调用a时会发生崩溃,无论是从库还是主程序(后者通过在主程序中注释掉调用c()的行来获得)。 […]

在编译affdex linux示例应用程序时未定义对进程(std :: __ cxx11 :: basic_string …)的引用

我尝试编译affdex sdk示例应用程序时遇到以下错误 Linking CXX executable video-demo CMakeFiles/video-demo.dir/video-demo.cpp.o: In function 'main': video-demo.cpp:(.text+0x11cb): undefined reference to affdex::VideoDetector::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) collect2: error: ld returned 1 exit status 我正在使用GCC 5.2.1

ELFdynamic加载器符号查找顺序

解决dynamic重定位时符号查找的search顺序是什么? 当parsing共享库的符号时,加载器首先在“主要可执行文件”中search(让主要可执行文件覆盖定义…)或者什么?