Articles of gcc

如何为微处理器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 感谢您的帮助!

Makefile c ++ 11支持

我最近用C ++开始了一个小项目。 我创build了一个简单的Makefile: CC=g++ CFLAGS =-std=c++0x -I. -c VPATH = src include vpath %.c src vpath %.h include TabooSearch : main.o Task.o TabooList.o $(CC) $(CFLAGS) -o TabooSearch main.o Task.o TabooList.o 问题是,当我运行make我得到这种错误forms的海湾合作委员会: error: 'nullptr' was not declared in this scope 我没有任何IDE我的Makefile有什么问题,有人可以帮我解决这个问题。 在Debian上,我的gcc版本是4.7.2 提前致谢

如何创build一个仅在pthread链接时才使用互斥体的库?

我正在Linux上创build一个C库,它有几个function,它们共同操作一些全局数据。 为了使这些函数成为线程安全的,他们必须在代码中的适当位置使用互斥锁。 在Linux中,为了在应用程序中使用pthread,需要在适当的库中链接-lpthread 。 在编译我的库的情况下,如果它的用户决定在他们的应用程序中使用pthreads,并且他们不这样做,我想让它工作。 在开发人员在应用程序中不使用线程的情况下,它们不会与pthreads链接。 因此,我希望我编译的库不要求它,而且,在单线程应用程序中使用互斥体使用不必要的开销(更不用说是愚蠢的)。 是否有某种方式来编写代码(如果有必要,使用GCC扩展)只有某些符号被链接时,某个代码块才会运行? 我知道我可以使用dlopen()和朋友,但是这本身就需要一些我想要避免的东西。 我想我所要找的东西必须存在,因为几个标准函数在同一条船上,并且需要互斥体是线程安全的(而且是互斥的),但是即使不与pthread链接,也能工作。 在这一点上,我注意到66&67行上的FreeBSD的popen()函数使用了非可移植的检查 – isthreaded ,以确定是否使用线程,以及是否使用互斥锁。 我怀疑这样的东西是否以任何方式标准化。 但是更重要的是,如果符号不被识别,那么这样的代码就不能编译和链接,而在Linux中,如果pthread没有链接,互斥符号将不会存在。 总结一下:在Linux上,如何创build一个库,它知道什么时候使用线程,如果是,在适当的情况下使用互斥锁,并且不需要链接到pthread,除非应用程序开发人员特别想在某处使用线程。