Articles of gcc

任何方式来指定configuration文件数据的位置

configuration文件是从可执行文件中运行的默认文件,名为gmon.out 。 有什么办法指定一个新的位置? 我在i386 / linux2.6上使用gcc 3.4.6

为什么glibc和pthread库都定义了相同的API?

为什么glibc和pthread库都定义了相同的API? 这是快照 ubuntu@ubuntu:/lib$ objdump -T /lib/i386-linux-gnu/libc.so.6 |grep pthread_cond_signal 000f8360 g DF .text 00000039 GLIBC_2.3.2 pthread_cond_signal 0012b940 g DF .text 00000039 (GLIBC_2.0) pthread_cond_signal ubuntu@ubuntu:/lib$ objdump -T /lib/i386-linux-gnu/libpthread.so.0 |grep pthread_cond_signal 0000b350 g DF .text 0000007c (GLIBC_2.0) pthread_cond_signal 0000af90 g DF .text 000000fc GLIBC_2.3.2 pthread_cond_signal

从Visual Studio Solution生成Make文件(用于GCC)

我想在Linux下使用GCC编译我的Visual Studio解决scheme ,包含三个项目。 该解决scheme包含两个DLL项目和一个使用这些DLL的应用程序(.EXE)项目 。 源代码不包含任何Windows依赖项。 如何将解决scheme(包含3个项目)转换成可以在Linux中使用GCC编译的文件。 是否有任何工具将Visual Studio解决scheme(项目)转换为文件。 Visual Studio版本是Visual Studio 2008

提升日志,GCC 4.4和CMake

我正在尝试使用GCC 4.4.5,CMake 2.8.2和Boost 1.53.0在Linux上运行一个简单的boost.log示例。 编译boost和boost日志成功了,但是当我的testing程序连接到boost.log时,我一直在收到问题。 我使用下面的CMakeLists.txt文件: cmake_minimum_required(VERSION 2.8) project(QuantibBoostLogTest) # Include boost headers set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) find_package(Threads) find_package(Boost 1.53.0 COMPONENTS thread date_time filesystem system log log_setup REQUIRED) if(Boost_FOUND) include_directories( ${Boost_INCLUDE_DIRS} ) link_libraries(${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES}) else(Boost_FOUND) message(FATAL_ERROR "Cannot build Quantib Boost Log test without Boost. Please set Boost_DIR.") endif(Boost_FOUND) add_executable(quantibBoostLogTest boost_log_test.cxx) install(TARGETS quantibBoostLogTest DESTINATION .) CMake确实检测到boost库,但我仍然得到链接器错误,主要是forms: […]

我如何检查重构时没有破坏什么?

我即将开始在我的代码重构的一些function回合。 我有一个很好的unit testing,可以确保我没有损坏任何东西,但我不确定他们给我的报道。 有没有可以分析代码的工具,并看到function保持不变? 我打算重构一些相当孤立的代码,所以我不需要检查整个程序,只是我正在处理的区域。 对于上下文,我正在使用的代码是C / C ++,而我使用GCC和VIM在Linux中工作。

了解使用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 : […]