Articles of gcc

共享库是否与应用程序使用相同的堆?

假设我在Linux中有一个使用共享库( .so文件)的应用程序。 我的问题是,这些库中的代码是否将分配与主应用程序相同的堆内存,或者他们使用自己的堆? 因此,例如, .so文件中的某个函数调用malloc ,它会使用与应用程序相同的堆pipe理器还是另一个? 另外,那些共享内存中的全局数据呢? 它在哪儿撒谎? 我知道应用程序位于bss和数据段,但不知道这些共享对象文件的位置。

如何在使用gcc进行静态链接时仅包含已使用的符号?

我正在部署一个用gcc编译的小程序,4.3.2-1.1(Debian)。 这个程序将部署在从Debain 5到最新的Fedora,Ubuntu,Slackware,Arch等虚拟机模板上。 该程序依赖于Xen库中的某些符号,这些符号仅在不稳定的树中可用。 因此,通过虚拟机模板上的各个软件包pipe理器来安装Xen的库并不能解决我的问题。 直到我打包我自己版本的这些库,我需要静态链接可执行文件。 gcc 4.3-x,默认情况下只包含静态链接时实际使用的符号,还是有另一个优化标记,我应该传递给链接器? 我知道,静态链接是不好的,我只是作为一个临时的工作。

int main(){return(0);}上的浮点exception(SIGFPE) }”

我正在尝试为两个不同的Linux环境构build一个简单的C程序。 在一个设备上,程序运行良好,在另一个设备上程序产生一个浮点exception。 该程序什么都不做,但从主返回0,这使我相信有一些不符合启动代码或ABI? 该程序是与海湾合作委员会与以下build设规范编译: 使用内置的规格。 目标:i386-redhat-linuxconfiguration:../configure –prefix = / usr –mandir = / usr / share / man –infodir = / usr / share / info –enable-shared –enable-threads = posix –enable-checking = release –with-system-zlib –enable -__ cxa_atexit –disable-libunwind-exceptions –enable-libgcj-multifile –enable-languages = c,c ++,objc,obj-c ++ ,java,fortran,ada –enable-java-awt = gtk –disable -dssi –disable-plugin –with-java -home = / […]

剥离Linux共享库

最近我们被要求发布我们的一个库的Linux版本,以前我们已经在Linux下开发并运行Windows,部署库通常要容易得多。 我们遇到的问题是将导出的符号仅剥离到暴露的界面中。 有三个很好的理由想要做到这一点 通过导出的符号来保护我们技术的专有方面。 为了防止用户遇到符号名称冲突的问题。 为了加快图书馆的加载(至less我被告知)。 举一个简单的例子: TEST.CPP #include <cmath> float private_function(float f) { return std::abs(f); } extern "C" float public_function(float f) { return private_function(f); } (g ++ 4.3.2,ld 2.18.93.20081009) g++ -shared -o libtest.so test.cpp -s 并用符号来检查符号 nm -DC libtest.so 给 w _Jv_RegisterClasses 0000047c T private_function(float) 000004ba W std::abs(float) 0000200c A __bss_start w __cxa_finalize w […]

警告:函数的隐式声明“getresuid”(和“seteuid”)

我想摆脱警告。 当我编译的源代码 gcc -Wall -ansi -o test test.c 我回来了 test.c: In function 'main': test.c:12: warning: implicit declaration of function 'getresuid' test.c:14: warning: implicit declaration of function 'seteuid' 当我编译它没有-ansi开关 gcc -Wall -o test test.c 我在terminal上看到 test.c: In function 'main': test.c:12: warning: implicit declaration of function 'getresuid' 我想使用-ansi开关并摆脱警告。 我怎样才能达到我的目标? /* this is the test.c */ #include <stdio.h> […]

Cuda编译器不能使用GCC 4.5 +

我是Cuda新手,我正在编译这个简单的test_1.cu文件: #include <stdio.h> __global__ void kernel(void) { } int main (void) { kernel<<<1,1>>>(); printf( "Hello, World!\n"); return 0; } 使用这个: nvcc test_1.cu 我得到的输出是: In file included from /usr/local/cuda/bin/../include/cuda_runtime.h:59:0, from <command-line>:0: /usr/local/cuda/bin/../include/host_config.h:82:2: error: #error — unsupported GNU version! gcc 4.5 and up are not supported! 我的gcc – 版本: gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 Copyright (C) 2011 Free […]

使用gcc按位移动的意外行为

我有一个像这样的testing程序: int main() { unsigned n = 32; printf("ans << 32 = 0x%X\n", (~0x0U) << 32); printf("ans >> 32 = 0x%X\n", (~0x0U) >> 32); printf("ans << n(32) = 0x%X\n", (~0x0U) << n); printf("ans >> n(32) = 0x%X\n", (~0x0U) >> n); return 0; } 它产生以下输出: ans << 32 = 0x0 … (1) ans >> 32 = […]

错误:使用&&操作符时使用但未定义的标签

int main() { int i = 0; int *p = &i; int *q = &&i; return 0; } 在Linux上使用gcc进行编译时,出现错误 addr.c: In function 'main': addr.c:6:2: error: label 'i' used but not defined 为什么编译器将int i当作label而不是整数? 我们什么时候使用&& operator ? 编辑 :好的,我可以稍微理解答案,但是你能解释一下“arch / arm / include / asm / processor.h”下面的macros定义。 它没有说label任何内容,但是评论说,它可以返回“ program counter ” /* * Default implementation of […]

有没有办法在Linux系统上禁用CPUcaching(L1 / L2)?

我正在分析Linux系统上的一些代码(在Intel Core i7 4500U上运行)以获得执行成本的时间。 该应用程序是来自libmpeg2的demo mpeg2dec。 我正在尝试获取mpeg2执行时间的概率分布。 但是,我们希望看到cachingclosures时的原始执行成本。 有没有办法通过Linux命令或通过gcc标志禁用我的系统的cpucaching? 甚至将cpu(L1 / L2)caching大小设置为0KB? 甚至添加一些代码更改为禁用caching? 当然,不用修改或重build内核。

“bash:./a.out:'ld`运行的可执行文件上没有这样的文件或目录

这里是一个C世界中的Hello World代码: // ac #include <stdio.h> int main() { printf("Hello world\n"); return 0; } 我把它编译为gcc ac ,它可以像预期的那样产生a.out ,而./a.out打印出Hello world所期望的Hello world 。 现在,如果我分别进行编译和链接: gcc -c ac; ld -lc ao gcc -c ac; ld -lc ao ,它运行a.out生成为./a.out我得到的消息: bash: ./a.out: No such file or directory 我GOOGLE了错误,似乎发生在生成的可执行文件是一个32位ELF和机器体系结构是64位。 我正在运行一个64位的机器和正在运行的file a.out : a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), […]