Articles of gcc

如何在gcc内联汇编中使用全局variables

我正在尝试像这样使用内联汇编,对于全局variables,但编译器通过说明对saved_sp的未定义引用给出错误。 __asm__ __volatile__ ( "movq saved_sp, %rsp\n\t" ); saved_sp全局声明为static long saved_sp (对于一个文件)。 我在这里犯了什么错误?

为什么在_start之前调用glibc的csu / init-first.c中的_init,即使_start是ELF入口点?

我在玩GDB的rbreak .时候首先注意到了它rbreak . ,然后做了个小例子: (gdb) file hello_world.out Reading symbols from hello_world.out…done. (gdb) b _init Breakpoint 1 at 0x4003e0 (gdb) b _start Breakpoint 2 at 0x400440 (gdb) run Starting program: /home/ciro/bak/git/cpp/cheat/gdb/hello_world.out Breakpoint 1, _init (argc=1, argv=0x7fffffffd698, envp=0x7fffffffd6a8) at ../csu/init-first.c:52 52 ../csu/init-first.c: No such file or directory. (gdb) continue Continuing. Breakpoint 2, 0x0000000000400440 in _start () (gdb) […]

EC2上没有C编译器?

我一直在试图在我的EC2实例上安装Gearman,但是当我尝试./configure gearmand时,我得到这个: checking build system type… x86_64-unknown-linux-gnu checking host system type… x86_64-unknown-linux-gnu checking target system type… x86_64-unknown-linux-gnu checking for gcc… no checking for cc… no checking for cl.exe… no configure: error: in `/home/ec2-user/gearmand-1.1.3': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details 现在,奇怪的是,GCC是绝对安装的。 which gcc46 回报 /usr/bin/gcc46 但是,当我尝试运行命令“gcc”时,找不到… 我试图通过yum擦除/安装/重新安装gcc和gcc-c ++,但这似乎没有帮助。 […]

GCC构build问题(#include_next limits.h)

当我尝试 $ make depends -f gcc.mak 我的Ubuntu机器上的中间件我得到这个 /usr/include/../include/limits.h:125:26:错误:不包含要在其中searchlimits.h的path 这是limits.h的内容:125: / *获取编译器的limits.h,它定义了几乎所有的ISO常量。 我们把这个#include_next放在双重包含检查之外,因为 应该有可能包含这个文件不止一次,仍然得到 来自gcc头文件的定义。 * / #if defined __GNUC__ &&!defined _GCC_LIMITS_H_ / *`_GCC_LIMITS_H_'是GCC文件定义的。 * / #include_next <limits.h> #万一 我试着设置 $ export INCLUDE = / usr / lib / gcc / x86_64-linux-gnu / 4.3 / include-fixed / $ export C_INCLUDE_PATH = / usr / lib / […]

build立OpenCV作为静态库

也许我错过了一些东西,但我无法构buildopencv的静态库。 build立: Kubuntu 12.04 gcc 4.6.3 使3.81 2.8.7 opencv 2.4.6.1(最后一个可用的网站) 我手动完成所有工作。 我尝试用cmake-gui没有更多的成功。 我做它写的东西。 $ cmake -D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX = / usr / local -D BUILD_PYTHON_SUPPORT = ON -D WITH_QT = ON -D BUILD_SHARED_LIBRARIES = OFF .. (我也尝试了BUILD_SHARED_LIBRARIES = NO) 我得到的是(例如核心): libopencv_core.so libopencv_core.so.2.4 libopencv_core.so.2.4.6 libopencv_core_pch_dephelp.a 说实话,我期望libopencv_core.a 。 我是一个在Linux上build立包/ libs的新手。 我确定有些事我做错了,但我不知道是什么。 另外我不想使用dynamic库… 谢谢你的帮助! 编辑删除cmake命令行中的-D […]

为什么这个内联程序集不工作?

对于下面的代码: long buf[64]; register long rrax asm ("rax"); register long rrbx asm ("rbx"); register long rrsi asm ("rsi"); rrax = 0x34; rrbx = 0x39; __asm__ __volatile__ ("movq $buf,%rsi"); __asm__ __volatile__ ("movq %rax, 0(%rsi);"); __asm__ __volatile__ ("movq %rbx, 8(%rsi);"); printf( "buf[0] = %lx, buf[1] = %lx!\n", buf[0], buf[1] ); 我得到以下输出: buf[0] = 0, buf[1] = 346161cbc0! […]

在64位的Linux机器上,在gcc中创build“long”4个字节

我正在将应用程序移植到Linux平台上的64位。 该应用程序目前支持Linux,Windows,Mac 32位和Windows 64位。 我们经常遇到的其中一个问题是long用于int,反之亦然。 直到现在这个问题还没有解决,因为long和int在应用程序当前支持的平台上是可以互换的(都是4个字节)。 代码库是一个巨大的代码库,大量的遗留代码使用了许多数据types的#define,这使得searchlong的所有用法以及用int来适当的replace成为麻烦。 作为一个短期的解决scheme,有没有办法让GCC使用4个字节而不是8个'long'? 如果有的话,我们可能会遇到什么问题? 如果没有,是否有更简单的方法来解决长期和整数的问题?

Linux汇编错误“在'asm'中不可能的约束

我从Linux下的汇编开始。 我已经将下面的代码保存为testasm.c 并编译为:gcc testasm.c -otestasm 编译器回复:“asm'中不可能的约束”。 #include <stdio.h> int main(void) { int foo=10,bar=15; __asm__ __volatile__ ("addl %%ebx,%%eax" : "=eax"(foo) : "eax"(foo), "ebx"(bar) : "eax" ); printf("foo = %d", foo); return 0; } 我该如何解决这个问题? (我从这里复制了这个例子。) Debian Lenny,内核2.6.26-2-amd64 gcc版本4.3.2(Debian 4.3.2-1.1) 分辨率 : 看到接受的答案 – 看起来“修改”的条款不再支持。

在没有c编译器的情况下在Linux上安装gcc

我如何在没有任何C编译器的系统上安装gcc? 这个系统是一个Linux的基础防火墙,并没有任何C编译器。

什么是__gmon_start__符号?

我用gcc hello.c编译这段代码-o hello -O3 #include <stdio.h> int main(void) { printf("Hello world\n"); return 0; } 当我列出重新分配我得到: test@southpark$ readelf -r hello | grep gmon 080495a4 00000106 R_386_GLOB_DAT 00000000 __gmon_start__ 080495b4 00000107 R_386_JUMP_SLOT 00000000 __gmon_start__ 当我列出这个文件中的符号时,我得到: test@southpark$ readelf -s hello | grep gmon 1: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ 48: 00000000 0 NOTYPE WEAK DEFAULT UND […]