Articles of gcc

了解使用gcc的共享库

我想了解C中共享库的以下行为 机一号 $ cat one.c #include<stdio.h> int main() { printf ("%d", 45); } $ gcc one.c -o one -O3 $ ldd one linux-gate.so.1 => (0x00331000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x00bc2000) /lib/ld-linux.so.2 (0x006dc000) $ cat two.c int main() { int i = 0; } $ gcc two.c -o two -O3 $ ldd two linux-gate.so.1 => (0x006f7000) libc.so.6 […]

如何在Linux Mint上安装GCC 4.7.2?

我需要在Linux Mint 13上安装最新版本的GCC。我发现Ubuntu 12.04有一些有用的terminal命令,但似乎在互联网上没有类似的Mint存在… 编辑:我解决了这个问题,所以,为了帮助其他人,写下这些命令: sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install g++-4.7 c++-4.7 一切正常。 🙂

编译libgcc xgcc错误

我想安装交叉编译器, 本教程 ,当我想要使libgcc我只是把我make all-target-libgcc在我的terminal。 这使得抛出错误 checking whether ln -s works… yes checking for i586-elf-gcc… /usr/src/build-gcc/./gcc/xgcc -B/usr/src/build-gcc/./gcc/ -B/usr/local/cross/i586-elf/bin/ -B/usr/local/cross/i586-elf/lib/ -isystem /usr/local/cross/i586-elf/include -isystem /usr/local/cross/i586-elf/sys-include checking for suffix of object files… configure: error: in `/usr/src/build-gcc/i586-elf/libgcc': configure: error: cannot compute suffix of object files: cannot compile See `config.log' for more details. make: *** [configure-target-libgcc] Error 1 在config.log中我find了 Target: i586-elf […]

LD_LIBRARY_PATH似乎不起作用

我试图编译一个testing文件: gcc -o test test.c -lg2c 但我得到的错误: /usr/bin/ld: cannot find -lg2c 如果我使用: gcc -o test test.c -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6 -lg2c 那么它工作正常。 所以我添加了这样的path: LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/3.4.6:$LD_LIBRARY_PATH 当我使用$LD_LIBRARY_PATH它在那里列出,但是: gcc -o test test.c -lg2c 仍然不起作用,它给出了同样的错误,我不明白为什么。 我正在使用CentOS(2.6.32-279.9.1.el6.x86_64),任何帮助将不胜感激。 编辑 :编译器版本: rpm -qa | grep gcc gcc-4.4.6-4.el6.x86_64 compat-gcc-34-g77-3.4.6-19.el6.x86_64 libgcc-4.4.6-4.el6.x86_64 compat-gcc-34-3.4.6-19.el6.x86_64 gcc-gfortran-4.4.6-4.el6.x86_64 libgcc-4.4.6-4.el6.i686 gcc-c++-4.4.6-4.el6.x86_64 编辑 :我尝试使用LIBRARY_PATH而现在我得到一个不同的错误: gcc: spec failure: unrecognized spec option 'M' 我不知道这是什么意思。

有一个更清洁的方式来可靠地使用write()函数吗?

我阅读man页,我的理解是,如果write()失败,并将errno为EAGAIN或EINTR ,我可以再次执行write() ,所以我想出了以下代码: ret = 0; while(ret != count) { write_count = write(connFD, (char *)buf + ret, count); while (write_count < 0) { switch(errno) { case EINTR: case EAGAIN: write_count = write(connFD, (char *)buf + ret, count -ret); break; default: printf("\n The value of ret is : %d\n", ret); printf("\n The error number is : […]

gcc -O4优化标志

gcc(3.2.3)中-O4优化标志的含义是什么? O3有什么区别? 你什么时候使用一个和另一个? 手册页只提到O,O0-3,O,没有神秘O4的字。 谢谢!

无法从可执行共享库中输出浮点数

我正在开发一个可以独立执行的共享库来打印它自己的版本号。 我已经定义了一个自定义入口点: const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2"; void my_main() { printf("VERSION: %d\n", 0); _exit(0); } 和我一起编译 gcc -o list.os -c -g -Wall -fPIC list.c gcc -o liblist.so -g -Wl,-e,my_main -shared list.os -lc 此代码编译和运行完美。 我的问题是当我将printf的参数更改为float或double(%f或%lf)时。 运行时,库将会编译但segfault 。 有人有主意吗? EDIT1: 这是段错误的代码: const char my_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2"; void my_main() { printf("VERSION: %f\n", 0.1f); _exit(0); } EDIT2: […]

执行init和fini

我刚刚读了ELF文件中的init和fini部分 ,并试了一下: #include <stdio.h> int main(){ puts("main"); return 0; } void init(){ puts("init"); } void fini(){ puts("fini"); } 如果我执行gcc -Wl,-init,init -Wl,-fini,fini foo.c并运行结果,则不会打印“init”部分: $ ./a.out main fini init部分没有运行,还是无法打印? 有没有关于init / fini的任何“官方”文档? man ld说: -init=name When creating an ELF executable or shared object, call NAME when the executable or shared object is loaded, by setting DT_INIT to […]

我怎样才能编译汇编与gcc

我如何编译到程序集而不是使用gcc的可执行文件。 我知道有一个-S标志,但是我在哪里可以在makefile中使用它。 例如,如果我使用标志-O3 -o exe_name ,我应该在哪里放置-S标志?

安装PCRE时出错

我试图在我的Ubuntu 11.10服务器上安装PCRE。 当我运行“make”命令时,我得到一个非常长的输出,总是以这个错误结束: libtool: link: ( cd ".libs" && rm -f "libpcreposix.la" && ln -s "../libpcreposix.la" "libpcreposix.la" ) source='pcrecpp.cc' object='pcrecpp.lo' libtool=yes \ DEPDIR=.deps depmode=none /bin/bash ./depcomp \ /bin/bash ./libtool –tag=CXX –mode=compile -DHAVE_CONFIG_H -I. -c -o pcrecpp.lo pcrecpp.cc libtool: compile: unrecognized option `-DHAVE_CONFIG_H' libtool: compile: Try `libtool –help' for more information. make[1]: *** [pcrecpp.lo] Error 1 […]