Articles of gcc

在使用C ++和GCC的Linux中,是否可以将虚拟地址转换为物理地址?

在Linux,C ++和GCC下,我可以得到给定虚拟地址的物理地址吗? 我知道我将无法将物理地址作为物理地址。

用非主libc编译(eglibc,uClibc)

我正在embedded式环境中工作。 我有一个交叉编译器的ARM架构与eglibc因为它的主要库(即与工具链一起默认的libc )。 现在我想要一些应用程序与uClibc链接。 所以我用这个工具链编译了uClibc 。 现在尝试编译和链接与uClibc的应用程序,有一个错误。 它正在链接到工具链的默认库。 我认为它可能在同一台机器上有两个不同的libcs​​(例如,libc,uClibc)。 我在网上search和以下 单个主机上有多个glibc库 正如它所build议的,我做了以下事情 $arm-unknown-linux-gnueabi-gcc -c test.c -o TEST $arm-linux-gnueabi-gcc TEST -o dynamic_test_with_new_opts -Wl,rpath=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib -Wl,-dynamic-linker=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib/ld-uClibc.so.0 在这种情况下,它与eglibc的默认libc.so.6 eglibc 如何链接到不同的libc文件? 正如上面的链接build议,我甚至尝试了以下几点: $arm-unknown-linux-gnueabi-gcc -Xlinker -rpath=/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib -Xlinker -I/home/user/UCLIBC/uClibc-0.9.32.1/INSTALL-DIR/usr/arm-linux-uclibc/lib/ld-uClibc-0.9.32.1.so test.c -o dynamic_test_with_linker_options 在这种情况下,它也被链接到eglibc的默认libc.so.6 我哪里错了? 我真的被困在这。 有人可以摆脱一些光?

gcc编译.c与.s文件 – .bss混淆(bug?)

在IA32体系结构的Ubuntu 12.04下使用gcc 4.6.3时遇到了一个问题,那就是使用存储在.bss段上的汇编文件编译C文件,同时使用.comm和.lcomm指令。 在.comm和.lcomm缓冲区之间,汇编文件foo.s使用接近最大的空间让我在这个分区中分配(foo计算长整数的总分解)。 用一个汇编文件bar.s来处理I / O等等,所有东西都编译和链接正常(和快速),并且工作正常。 当我使用C文件bar.c处理I / O时,gcc不会终止 – 至less不会在5分钟内完成。 .bss请求接近我的小型笔记本内存,但由于.bss段没有得到编译时初始化,并与bar.s一起工作,我不明白为什么会发生这种情况。 当我减小在foo.s中请求的.bss大小时,gcc编译并链接正常,并且所有的东西都按照它应该执行的那样执行。 此外,正如所料,在每种情况下使用创build的可执行文件的文件大小 gcc bar.c foo.s -Wall 不依赖于.bss请求的大小 (我编译的大小都比原来的小,大小不一)。 在所有情况下,可执行文件都是非常小的(可能是10k),实际上它的大小是相同的,但显然,原始文件不能成功编译并挂起。 这是海湾合作委员会的错误? 有没有一个命令行选项来防止这种情况发生? 或者是怎么回事? 编辑:每个评论,这里是与.bss段分配的部分: # Sieve of Eratosthenes # Create list of prime numbers smaller than n # # Note: – no input error (range) check # – n <= 500,000,000 (could be […]

当编译不同的程序时,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标志,或包装,或什么?