草庐IT

c - 如何确定 gcc 默认将哪些命令行选项传递给 ld?

考虑一下helloworldC程序:你好.c:#include"stdio.h"intmain(){printf("Hello,World!\n");}如果我调用:$gcc-chello.c-ohello.o它将生成一个ELF可重定位文件hello.o如果我再调用:$gcchello.o-ohello[1]它将hello.o与ld链接并生成一个ELF可执行文件hello但是,如果我直接调用ld[2]而不是[1]:$ldhello.o-ohello[2]我收到这些错误:/usr/bin/ld.bfd.real:warning:cannotfindentrysymbol_starttest

linux - 如何在 Linux Ubuntu 上使用 2 个不同版本的 GCC 并强制 MAKE 使用其中之一

我正在使用gcc4.4.5版本附带的最新版本的Ubuntu。我需要重新编译一个不是我写的程序,它只能用旧版本的gcc编译,比如4.0。我设法配置了这个旧版本并在安装过程中使用了一个前缀,这样我的旧gcc版本就在/opt/gcc-4.0.1/bin中。我尝试使用ln-s/opt/gcc-4.0.1/bin/gccgcc创建符号链接(symboliclink)。但是当我调用gcc-v时,我仍然得到结果gccversion4.4.5。要编译已经带有makefile的程序,如果我执行make,它仍然使用新版本的gcc。我如何告诉make使用旧版本? 最佳答案

c++ - GCC 构建问题 (#include_next limits.h)

当我尝试$makedepend-fgcc.mak我的Ubuntu机器上的一个中间件我得到了这个/usr/include/../include/limits.h:125:26:error:noincludepathinwhichtosearchforlimits.h这是limits.h:125周围的内容:/*Getthecompiler'slimits.h,whichdefinesalmostalltheISOconstants.Weputthis#include_nextoutsidethedoubleinclusioncheckbecauseitshouldbepossibletoi

c++ - 在 Linux 上的 C++ 源文件上运行 'gcc' 给出 "cc1plus: out of memory allocating ..."错误消息

我在Ubuntu上使用“gcc”编译C++源文件时遇到了一个令人费解的问题。解决了这个问题后,我想在这里发布它,以免其他人为解决它而头疼。为了这份报告,我们有最简单的C++“Hello,World”程序,存储在main.cpp中:#includeintmain(intargc,char*argv[]){return0;}当我运行命令时:gccmain.cpp我收到错误信息:cc1plus:outofmemoryallocating1677721600bytesafteratotalof475136bytes我确认我正在编译正确的位(即32位)。我做错了什么?

c - 在 Linux 上使用 gcc 并在 Windows 上使用 MinGW 构建共享库

我在生成build设置时遇到了问题,该设置允许分别使用gcc和MinGW在Linux和Windows中构建共享库。在Linux中,共享库不必在编译时解决所有依赖关系;而在Windows中似乎就是这种情况。这是问题设置:$catfoo.h#ifndefFOO_H#defineFOO_Hvoidprintme();#endif$catfoo.c#include"foo.h"#includevoidprintme(){printf("HelloWorld!\n");}$catbar.h#ifndefBAR_H#defineBAR_Hvoidprintme2();#endif$catbar.c

linux - 是什么让 gcc std::list 排序实现如此之快?

我有一个链表实现,我正在试验Mergesort和QuickSort算法。我不明白的是为什么std::list中的排序操作这么快。查看linux下的std::list,它似乎也是链表,而不是基于数组的列表。我在这里尝试的合并排序与DaveGamble的版本几乎相同:MergeSortaLinkedList另外,我想我会尝试基于这段代码的简单快速排序:http://www.flipcode.com/archives/Quick_Sort_On_Linked_List.shtml令人惊讶的是,使用std::list对1000万个随机数进行排序并排序比其他任何一个快大约10倍。对于那些提问的人

linux - 为什么 gcc 为 x64 共享库强制 PIC?

尝试使用gcc将非PIC代码编译到x64上的共享库会导致错误,类似于:/usr/bin/ld:/tmp/ccQ2ttcT.o:relocationR_X86_64_32against`alocalsymbol'cannotbeusedwhenmakingasharedobject;recompilewith-fPIC这个问题是关于为什么会这样。我知道x64具有RIP相对寻址,旨在提高PIC代码的效率。然而,这并不意味着加载时重定位不能(理论上)应用于此类代码。一些在线资源,包括thisone(在这个问题上被广泛引用)声称在共享库中存在一些禁止非PIC代码的固有限制,因为RIP相对寻址。

linux - GCC 4.7.2 需要 ppl?

我正在尝试配置GCC4.7.2,但失败了configure:error:UnabletofindausablePPL我查看了GCCprerequisitespage并且PPL没有在任何地方被提及。我正在使用CLooG0.17.0,它使用ISL,因此不再需要PPL(据我所知)GCC中是否对PPL有其他一些要求,这意味着我仍然需要PPL,或者我的configure中是否缺少一些标志?行?我将以下选项传递给configure:--enable-cloog-backend=isl--with-cloog=$PREFIX--with-isl=$PREFIX--with-gmp=$PREFIX--

c - GCC 在编译时在/usr/local/include 中查找头文件,但在链接时不在/usr/local/lib 中查找库。为什么?

我已经在/usr/中安装了发行版提供的SQLite版本-版本3.4.2。我已经安装在/usr/local/SQLite版本3.7.4。/usr/include/sqlite3.h将SQLITE_VERSION_NUMBER定义为3004002/usr/local/include/sqlite3.h将SQLITE_VERSION_NUMBER定义为3007004版本3007004有函数sqlite3_initialize(),版本3004002没有。$nm-D/usr/local/lib/libsqlite3.so|grepsqlite3_initialize00018e20Tsqlit

linux - gcc -mpreferred-stack-boundary 选项

我想知道在GNU编译器中编译期间-mpreferred-stack-boundary选项有什么用。我已经检查了文档,但我失去了解释。有人可以解释一下吗。 最佳答案 Iwanttoknowwhat'stheuseof-mpreferred-stack-boundaryoptionduringcompilationinGNUdebugger.该选项绝对没有与调试器有关。它会影响二进制文件中生成的代码。默认情况下,GCC将进行安排,以便每个函数在进入时立即将其堆栈指针对齐到16字节边界(如果您有局部变量并启用sse2指令,这可能很重要)。