Articles of gcc

GCC详细模式输出说明

我是新来的Linux。 任何人都可以向我解释我的hello世界程序的详细模式输出? 另外,什么文件crt1.o , crti.o , crtend.o , crtbegin.o和crtn.o和lc和lgcc呢? 任何其他的解释链接也是受欢迎的。 $ gcc -v hello.c Reading specs from /usr/lib/gcc-lib/i686/3.3.1/specs Configured with: ../configure –prefix=/usr Thread model: posix gcc version 3.3.1 /usr/lib/gcc-lib/i686/3.3.1/cc1 -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=1 hello.c -quiet -dumpbase hello.c -auxbase hello -Wall -version -o /tmp/cceCee26.s GNU C version 3.3.1 (i686-pc-linux-gnu) compiled by GNU C version 3.3.1 […]

C预处理器如何处理循环依赖?

我想知道C预处理器如何处理循环依赖(#defines)。 这是我的程序: #define ONE TWO #define TWO THREE #define THREE ONE int main() { int ONE, TWO, THREE; ONE = 1; TWO = 2; THREE = 3; printf ("ONE, TWO, THREE = %d, %d, %d \n",ONE, TWO, THREE); } 这是预处理器输出。 我无法弄清楚为什么输出是这样的。 我想知道预处理器在这种情况下采取的各种步骤,以提供以下输出。 # 1 "check_macro.c" # 1 "<built-in>" # 1 "<command-line>" # 1 "check_macro.c" int […]

如何为微处理器SA1100安装交叉编译器(在ubuntu 12.04 LTS上)?

有人可以告诉我如何为SA1100微处理器安装交叉编译器(编程语言C)吗? 我有Ubuntu的12.04 LTS。 我是Linux的完全noob,我昨天刚刚安装了Ubuntu。 我需要一个名为“arm-unknown-linux-gnu-gcc”的GCC编译器的特殊变体,但不知道如何去做。 有人可以帮帮我吗?

<sys / queue.h>库中TAILQ用法的最小示例

有人可以从Linux系统库中提供TAILQ用法的最小例子,用c语言解释,可以在Linux中用gcc编译?

漂亮的打印makefiles

linux内核(以及包括git在内的各种其他项目)都有非常好的makefile,可以将巨大的cc调用隐藏起来。 例如: gcc -O2 -o cool.o cool.c -llib gcc -O2 -o neat.o neat.c -llib 会成为: CC cool.c CC neat.c 如果你有一个大量的文件和长的编译器标志的项目,这是非常好的。 我记得这是为了抑制默认的输出和自定义输出。 你怎么做呢?

为什么从.o创build一个.a文件来进行静态链接?

考虑这个代码: one.c: #include <stdio.h> int one() { printf("one!\n"); return 1; } two.c: #include <stdio.h> int two() { printf("two!\n"); return 2; } prog.c中 #include <stdio.h> int one(); int two(); int main(int argc, char *argv[]) { one(); two(); return 0; } 我想将这些程序链接在一起。 所以我这样做: gcc -c -o one.o one.c gcc -c -o two.o two.c gcc -o a.out prog.c […]

交叉编译器在Mac OS X上的Linux

我一直在读互联网上的许多文件关于在Mac OS X上创build一个交叉编译器的Linux,但不能缝到任何工作。 它似乎没有人能帮我解决这个问题: 让GMP与GCC 4.5.2一起工作 有什么简单的方法来创build交叉编译器?

链接错误与OpenSSL

我已经安装了OpenSSL。 我只想运行一个使用OpenSSL的程序。 这里是我的程序,从这里拿走。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "openssl/aes.h" int main(int argc, char* argv[]) { AES_KEY aesKey_; unsigned char userKey_[16]; unsigned char in_[16]; unsigned char out_[16]; strcpy(userKey_,"0123456789123456"); strcpy(in_,"0123456789123456"); fprintf(stdout,"Original message: %s", in_); AES_set_encrypt_key(userKey_, 128, &aesKey_); AES_encrypt(in_, out_, &aesKey_); AES_set_decrypt_key(userKey_, 128, &aesKey_); AES_decrypt(out_, in_,&aesKey_); fprintf(stdout,"Recovered Original message: %s", in_); return 0; } 在编译程序的时候,我得到了同样的错误信息,但是提供的解决scheme并不适合我。 我仍然收到编译错误。 […]

在运行configure时configuration不同于默认值的编译器

我正在编译glibc库。 在我能做到这一点之前,我需要运行configure 。 但是,为了编译glibc,我需要使用不是机器上默认编译器的gcc编译器。 手册中说了以下内容。 It may also be useful to set the CC and CFLAGS variables in the environment when running configure. CC selects the C compiler that will be used, and CFLAGS sets optimization options for the compiler. 现在我的问题是,我没有在该机器上的任何pipe理权限。 那么我怎样才能使用不同于默认的编译器。

GCC:putchar(char)inline assembly

溢出, 我怎么才能实现使用内联汇编的putchar(char)过程? 我想在x86-64程序集中做到这一点。 我这样做的原因是实现我自己的标准库(或至less它的一部分)。 这是我到目前为止: void putchar(char c) { /* your code here: print character c on stdout */ asm(…); } void _start() { /* exit system call */ asm("mov $1,%rax;" "xor %rbx,%rbx;" "int $0x80" ); } 我正在编译: gcc -nostdlib -o putchar putchar.c 感谢您的帮助!