Articles of gcc

在Linux下的16位链接

当我使用命令“nasm -f elf -l hello.lst hello.asm”时,我正在使用NASM汇编程序,但是当与gcc“gcc -o hello hello.o”链接时,它会生成一个错误: hello.asm 🙁 .text + 0x4):重定位被截断为适合:R_386_16对`.data'collect2:ld返回1退出状态 我了解到,这是gcc和16位的一些问题 任何解决scheme

交叉编译glibc for arm

现在我正在使用基于arm-linux的embedded式设备。 我想用glibc为我的目标架构构buildgcc。 海湾合作委员会build立成功,但我有麻烦与glibcbuild设。 我使用最新版本的glibc(ftp.gnu.org/gnu/glibc/glibc-2.12.1.tar.gz)和端口(ftp.gnu.org/gnu/glibc/glibc-ports-2.12.1 .tar.gz)方式 我的configuration线: ../../glibc-2.12.1/configure –host = arm-none-linux-gnueabi –prefix = / home / anatoly / Desktop / ARM / build / glibc-build –enable-add-ons – -with-的binutils = /家庭/阿纳托利/ Desctop / ARM /工具链/ ARM /斌/ configuration脚本工作正常,但我得到一些编译错误: … / home me': /home/anatoly/Desktop/ARM/src/glibc-2.12.1/malloc/lmemusage.c:253: undefined reference to __eabi + read_tp'… 我也尝试使用旧版本(2.11,2.10),但有相同的错误。 有谁知道这个问题的解决scheme?

在非标准的位置build立gcc-4.3.4时遇到困难

我需要在非标准位置(NFS挂载)中构buildgcc-4.3.4。 我configuration了: ../gcc-4.3.4/configure –prefix={install dir} –with-gmp={install dir} –with-mpfr={install dir} –with-local-prefix={install dir} –disable-shared 我跑了make -j1 。 但我不断收到: checking for suffix of object files… configure: error: cannot compute suffix of object files: cannot compile 在x86_64-unknown-linux-gnu/libgcc/config.log ,我可以看到: /home/panthdev/apps/gcc-4.3.4-compliant/compiler/objdir/./gcc/cc1: error while loading shared libraries: libmpfr.so.1: cannot open shared object file: No such file or directory libmpfr.so.1在{install dir}/lib 。 另外,如果我将LD_LIBRARY_PATH设置为{install […]

帮助%es注册x86到x86_64汇编代码端口

好的,我得到这个编译错误: 错误:“push”后缀或操作数无效 当我使用这一行时: pushw %es; 我知道这是%es或w,因为我已经成功地将其他push,pop命令移植到64位汇编器。 根据我发现的一些文档, %es是一个现有的registry,我认为它没有被引用。 那么可能是我的问题呢? 我对我的生物非常生锈,我认为它可能是w。 谢谢你的帮助。

如何链接到二进制库的debugging版本

如果我使用-l选项传递一个lib名称,那么GCC将链接到来自/ usr / lib的最好的lib。 我认为当两者都存在时,dynamic版本是在静态版本上select的。 但也有相同的lib的debugging版本。 debugging版本应该是优化closures和额外的运行时检查编译。 我使用软件包pipe理器(Ubuntu上的Synaptic)检查了一下,我的电脑上确实安装了dbg版本,但并不完全知道这些库在哪里以及如何链接到它们。 任何提示,不胜感激。 谢谢。

GCC +内联程序集 – notl上意外的Segfault

代码: http : //paste.pocoo.org/show/422081/ (链接404失踪)。 好吧,所以我想不通用大块的内存,并决定我做了愚蠢的演员diddling,并认为我会下降到行内大会(我认为它实际上提高了可读性)。 我已经设法缩小这个段错误到一个特定的function。 在粘贴的第22行。 然而它总是段错误。 正如你所看到的,str被传递为argv [1]。 我可以手动做的东西给argv [1](例如argv[1][0] = 'q' ),所以我不能完全确定为什么这不行,尤其是考虑到先前没有成功运行not8而not2 。 有没有什么新奇的事情我不知道? 这里怎么了? 另外一个通用的代码审查将是很好的; 我对C相当陌生

使用GCC在linux机器上生成Xcode

我在我的linux机器上安装了gcc,我的linux机器上有我的xcode项目。 现在有无论如何,我可以在Linux机器上使用gcc生成xcodebuild?

我如何移动registry中的标签地址?

在x86的gcc内联汇编中,如何移动标签在寄存器中的地址。 它应该是什么,而不是$标签在这里,因为汇编错误未定义的引用标签 。 请注意,标签在asm块之外,即在正常的C代码中。 __asm__ __volatile__ ("movl $label, %eax;"); label: …..

在另一个发行版中运行C可执行文件

我有一个C程序,我正在开发使用Ubuntu 11.10(Linux版本3.0.0-12-generic-pae内核)。 我需要在安装有Debian 3.1(Linux版本2.4.24-om2)的集群中运行该程序,并使用Intel(R)Pentium(R)4 CPU 3.20GHz处理器。 问题是我无法在Debian集群中进行编译,因为它没有安装我的程序需要的GSL库,我不知道如何在没有root权限的情况下安装它(或使用它)。 如果我尝试运行我在Ubuntu中编译的可执行文件(或者简单的hello world程序,对于这种情况),即使我使用在群集上执行时引发的所有gcc选项进行编译,也是行不通的。 gcc –save-temps -fverbose-asm hello_world.c -o hello_world 当我尝试执行在Ubuntu中编译的程序时,会抛出: floating point exception 更新:当我使用-static标志编译时,我得到的错误是: FATAL: kernel too old Segmentation fault. 所以我可以做一些比重新实现我使用的GSL的所有function更好的东西。

未使用function的链接器错误:它们什么时候发生?

假设静态库libfoo依赖于另一个静态库libbar的某些function。 这些和我的应用程序都是用D写的。如果我的应用程序只是直接使用libfoo,而且只调用libfoo中不引用libbar中的符号的函数,有时程序链接成功,不会将libbar传递给链接器,有时则不成功。 发生这些事情似乎取决于我用什么编译器编译libfoo,libbar和我的应用程序,即使所有编译器都使用GCC工具链进行链接。 如果我使用DMD,如果不将libbar传递给链接器,我永远不会收到链接器错误。 如果我使用GDC,我有时会这样做,原因我不明白。 如果我使用LDC,我总是这样做。 如果在libfoo中引用的符号是未定义的,但是这个符号出现在应用程序对象文件没有引用的函数中,是什么决定了GCC链接程序是否失败?