Articles of gcc

gcc -mpreferred-stack-boundary选项

我想知道GNU编译器在编译过程中使用了-mpreferred-stack-boundary选项。 我查过了文档,但是我的解释没有了。 有人可以解释一下吗?

核心实用程序缺less__vdso_time?

我build立了最新的glibc,现在我在使用ls或cat类的coreutils函数或vim类的函数时遇到了一些麻烦。 我的错误是 -bash-4.0$ cat cat: error while loading shared libraries: __vdso_time: invalid mode for dlopen(): Invalid argument 和我build立,glibc没有错误与以下configuration ../glibc/configure –prefix=/home/ex/uid377/glibbuilt 在旧版本,如2.14,运行的实用程序导致分段错误。 -bash-4.0$ ./pwd ./pwd: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./pwd) -bash-4.0$ LD_LIBRARY_PATH=/home/ex/uid377/glibc/lib/:${LD_LIBRARY_PATH} -bash-4.0$ ./pwd Segmentation fault (core dumped) 编辑内核版本 -bash-4.0$ uname -r 2.6.32.26-175.fc12.x86_64

unique_ptr编译错误

如果我告诉你我不能把它编译出来,我觉得这很尴尬。 你能帮我吗? #include<memory> using namespace std; int main() { std::unique_ptr<int> p1(new int(5)); return 0; } $ gcc main.cpp main.cpp: In function 'int main()': main.cpp:6:2: error: 'unique_ptr' was not declared in this scope main.cpp:6:13: error: expected primary-expression before 'int' main.cpp:6:13: error: expected ';' before 'int' $ gcc –version gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1

什么是libg2c库?

我find了与“g2c”库链接的代码。 为什么我需要它? 只是想明白为什么它可能是重要的,它一般。 谢谢!

64位系统上的NULL定义问题

我使用gcc 4.1.2在RHEL 5.1 64位平台上运行。 我有一个实用的function: void str_concat(char *buff, int buffSize, …); 其中concat char *在可变参数列表(…)中传递,而最后一个参数应为NULL,以指定参数结束。 在64位系统上,NULL是8个字节。 现在的问题。 我的应用程序包括直接/间接2 stddef.h文件。 首先是/usr/include/linux/stddef.h ,它定义了NULL,如下所示: #undef NULL #if defined(__cplusplus) #define NULL 0 #else #define NULL ((void *)0) #endif 第二个是/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/stddef.h #if defined (_STDDEF_H) || defined (__need_NULL) #undef NULL /* in case <stdio.h> has defined it. */ #ifdef __GNUG__ #define NULL __null […]

如何在centos6上分发c ++ 11共享库

我有一个C ++ 11库( https://github.com/matiu2/cdnalizer )。 我想分发到centos6和ubuntu12.04 LTS。 它在Ubuntu 13.10和Gentoo上愉快地编译。 我尝试尽可能多的静态编译,但它仍然取决于centos没有的glibc: matiu@matiu-laptop:~/projects/cdnalizer/build/src/apache$ readelf -d mod_cdnalizer.so | grep NEED 0x0000000000000001 (NEEDED) Shared library: [libapr-1.so.0] 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6] 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000006ffffffe (VERNEED) 0xd520 0x000000006fffffff (VERNEEDNUM) 3 build造线: /usr/bin/g++ -fPIC -I/usr/local/include -I/usr/include -I/usr/include/x86_64-linux-gnu -I/usr/include/x86_64-linux-gnu/c++/4.8 -Wall -Wextra -g -shared -Wl,-soname,mod_cdnalizer.so […]

htonl()vs __builtin_bswap32()

__builtin_bswap32()用于反转字节(它用于littel / big endian问题(来自gcc))。 htonl()也用于反转字节(从主机到networking的转换)。 我检查了两个函数,他们返回相同的结果。 有没有人可以确认这两个function是一样的? (标准的refences是赞赏)

与电篱笆库海湾合作委员会不生效

我写了一个在dynamic分配时有内存问题的代码片段; 当用-lefence选项编译时,似乎没有效果。 这里是代码段: int main(int argc, char *argv[]) { int *a = (int *)malloc(2*sizeof(int)); for(int i = 0; i <=2; ++i){ a[i] = i; printf ("%d\n",a[i]); } free(a); return 0; } 和编译选项: gcc -g3 -Wall -std=c99 outOfBound.c -lefence 预期的结果是,当执行a.out时, i将分配给2并且调用a[i]=i之后会有一个核心转储。 那么为什么 – -lefence不起作用? 我也把循环上限增加到了9,但是还没有electric-fence调用的核心转储。 (实际上默认是有一个核心转储,但是这可能是由于MALLOC_CHECK_ env可取的,因为当我export MALLOC_CHECK_=0 ,将不会有更多的核心转储)。 更新 : nm -A a.out的全部结果如下: a.out:08049f28 d […]

我怎样才能衡量在Linux的真正的CPU使用情况?

我知道有一些像top和ps这样的测量CPU使用率的工具,但是他们测量CPU使用率的方式是测量空闲任务没有运行的时间。 因此,例如,即使CPU因高速caching未命中而失速,这些工具仍会考虑占用CPU。 不过,我想要的是,分析工具在失速期间将CPU视为空闲。 有没有什么工具可以做到这一点?

“Pentium4及以上”处理器的海湾合作委员会的最佳游行和选项是什么?

我的C ++应用程序(使用g ++编译)需要在Pentium-4(32位)及更高版本上工作。 但是,它通常与Core2Duo或更好的处理器一起使用。 我目前正在使用: -march = pentium4 -mtune = pentium4 。 但有些阅读促使我认为-march = pentium4 -mtune = generic可能会更好。 任何人都可以对此有所了解吗? 在这种情况下,三月和三月的最佳select是什么? 平台:RHEL 5.3(32位)上的GCC 4.1.2。