Articles of gcc

设置ostream linux / visual studio的指数字段的宽度

我需要在Linux和Visual Studio上运行一个类似的输出程序。 指数字段的Linux默认宽度是2,Visual Studio的是3。 所以对于一个数字3.40282e + 38的Linux离开它,但视觉工作室填补了一个额外的0,3.40282e + 038 任何人都知道如何在Visual Studio中configuration输出以消除零点? (或在Linux中添加一个零)

cmake include_directories在AFTER / BEFORE之后

我在源码树中有一个名为“time.h”的文件,正如系统“time.h”一样。 这不能改变。 我遇到了一个cmake的问题,当我使用include_library选项时,它被转换为-I标志,这意味着我的自定义“time.h”优先于系统时间。 这是一个定义不。 我尝试使用include_directories(后dir1 dir2),但它仍然生成-I选项,而不是预期的-idirafter。

安装了gmp,但看不到它

为了编译我自己的gcc,我需要gmp 。 因此,我下载了一个gmp的tarball,并按照configure,make和make install的通常步骤安装它。 但是,之后,通过input“which gmp”,我无法在系统中看到任何gmp。 所以我的问题是gmp隐藏在哪里? 我正在使用CentOS 5.6。 编辑 好的,我可以在/ usr / local / include和/ usr / local / lib中看到gmp的头文件和库文件。 我用–with-gmp-include=/usr/local/include –with-gmp-lib=/usr/local/lib但gcc的configuration仍然抱怨找不到gmp。 这里发生了什么?

如何在linux中不使用dlsym挂接

我试图钩一些glibc函数,像fopen,fread等,但在钩函数,我必须使用glibc相同的function。 喜欢这个: // this is my fopen FILE *fopen(…..) { fopen(….);// this is glibc fopen } 我已经find了一种方法来使用dlsym来做到这一点,但是这样我就必须用所有的glibc函数调用与其中使用dlsym调用glibc函数的包装器进行replace。 我很好奇,在没有对包装函数进行编码的情况下,另一种方式可以做同样的工作。 我试过这个: fopen.c ….fopen(..) { myfopen(..); } myfopen.c myfopen(..) { fopen(…);// glibc version } main.c中 int main() { fopen(…); } $ gcc -c *.c $ gcc -shared -o libmyopen.so myopen.o $ gcc -o test main.o fopen.o libmyopen.so 在我的理解中,gcc会按照命令行从左到右的顺序链接,所以main.o会在fopen.o中使用fopen.o,fopen.o将在libmyfopen.so中使用myfopen,libmyfopen.so将在glibc中使用fopen。 […]

LD_PRELOAD和externvariables

说,我想修改mmap 。 所以我为此创build了一个新的共享对象文件,并使用LD_PRELOAD来代替原始的mmap 。 但是,我需要引用一个variables,这是我的程序文件。 我怎样才能做到这一点? 我读了一些关于弱引用的地方。 是这样做的方式。 我不认为你可以使用extern因为你编译的共享库与你的程序分开。 对此有何build议? 其次, LD_PRELOAD只会影响代码中mmap的使用情况,或者也会影响您的代码使用的标准库libc.so中调用的mmap ?

在不修改内核的情况下拦截系统调用的最小开销方式

我知道拦截系统调用的方法如下。 使用ptrace ,但是这似乎有很高的开销。 据我所知,像strace这样的工具也在内部使用ptrace。 使用内核模块来更改系统调用表,但据我所知,这个方法在以后的linux内核中是不可能的。 使用LD_PRELOAD。 但是,如果您直接进行系统调用而不使用某个包装库函数进行该系统调用,则这将不起作用。 所以你看所有上面提到的方法都有缺陷。 所以我的问题是如何在不修改内核的情况下拦截系统调用,并且开销最小。

gcc 4.1可以链接一个由gcc 4.6编译的库吗?

可能重复: g ++ 4.1.2与g ++ 4.6混合使用 我有一个由GCC 4.6build立的图书馆。 我想在另一台服务器上将这个库链接到GCC 4.1。 我可以这样做吗? 如果不是,我该怎么办?

c调用汇编语言编写的函数

我正在练习使用GCC的C和汇编语言混合编程。 而这个错误发生了: 1 deng@ubuntu:~/workspace/leos_test$ make 2 ld -o deng co asm.o 3 ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074 4 co: In function `main': 5 c_and_asm.c:(.text+0x19): undefined reference to `add' 6 c_and_asm.c:(.text+0x2e): undefined reference to `printf' 7 make: *** [deng] Error 1 这是C代码: 1 #include<stdio.h> 2 void extern add(int * i); 3 […]

定位typesizes

typesizes.h位于哪里? 我已经安装了最新的gcc版本,我需要将__FD_SETSIZE设置为比1024更高的值。 我试着在/ usr / lib / bits /中查找它应该在的位置。 我试图编译UnrealIRCd,不能不改变__FD_SETSIZE。 有谁知道我为什么缺lesstypesize.h? 感谢您收到的任何帮助。

用gcc -lncurses标志编译ncurses代码似乎不工作

我正在用ncurses编写一个基于terminal的俄罗斯方块游戏。 我已经将所有的ncurses代码分离到一个名为tetrisUI.c的文件中,我在main.c源文件中包含一个头文件。 当我编译所有的ncurses函数引发编译器错误。 我在源文件中包含了ncurses.h,并且在gcc中使用了-lncurses标志。 我正从一个makefile编译以下内容: Tetris : tetris.o main.o tetrisUI.o gcc tetris.o main.o tetrisUI.o -o Tetris tetrisUI.o : tetrisUI.c gcc -std=c99 -c tetrisUI.c -lncurses tetris.o : tetris.c tetris.h gcc -std=c99 -c tetris.c main.o : main.c tetris.h tetrisUI.h gcc -std=c99 -c main.c 我能用ncurses编译几个简短的testing程序就好了。 这是我第一次尝试使用ncurses和我的第一个重要的c程序(我在学校做了一些c ++)。 我有一个预感,我的问题与我的生成文件有关,但我也是一个小白鼠也使用这些。