Questions tagged «gcc»

GCC是GNU编译器集合。它是Linux上针对C,C ++,Go,Fortran和Ada的事实上的标准编译器,并且还支持许多其他语言和平台。除编译器外,GCC还具有一个工具链(libc,libstdc ++,objdump,nm等),该工具链已在多个平台和系统上广泛使用。

6
如何使用GMP,MPFR,MPC,ELF逐个安装GCC,而无需共享库?
如何使用当前版本, 正确的依赖版本,不使用软件包管理器(如yum,rpm,apt,dpkg)以及不使用共享库来逐步安装GCC(GNU编译器集合)? 典型的开发人员可能会想以典型的方式安装GCC,使用软件包管理器(yum,rpm,apt,dpkg,port,brew等)或按照此处的说明进行操作(http://gcc.gnu.org/wiki/ InstallationGCC)。 我的问题是如何在没有共享库的情况下逐步安装GCC。 我想要一个完全独立的GCC,可以在我的系统中移动而不使用任何共享库,也无需创建任何共享库。 这就是GCC所谓的“困难之路”,不建议一般用户使用。 GCC取决于: GMP:GNU多精度算术库 MPFR:GNU多精度浮点舍入库 MPC:GNU多精度C库 ELF:可执行和可链接格式库 PPL:Parma Polyhedra库(可选,用于内存优化)
115 gcc  elf  gmp  mpfr  mpc 

2
C ++标准委员会打算在C ++ 11中unordered_map销毁它插入的内容吗?
我刚刚度过了三天的时间,一直在寻找一个非常奇怪的错误,在这个错误中unordered_map :: insert()破坏了您插入的变量。这种高度非显而易见的行为仅发生在最近的编译器中:我发现clang 3.2-3.4和GCC 4.8是唯一展示此“功能”的编译器。 这是我的主要代码库中的一些简化代码,可以说明该问题: #include <memory> #include <unordered_map> #include <iostream> int main(void) { std::unordered_map<int, std::shared_ptr<int>> map; auto a(std::make_pair(5, std::make_shared<int>(5))); std::cout << "a.second is " << a.second.get() << std::endl; map.insert(a); // Note we are NOT doing insert(std::move(a)) std::cout << "a.second is now " << a.second.get() << std::endl; return 0; …
114 c++  gcc  c++11  clang  standards 

17
编译问题:找不到crt1.o
我有一个用于开发的虚拟Debian系统。 今天,我想尝试llvm / clang。 安装clang后,我无法使用gcc编译旧的c项目。这是错误: ... /usr/bin/ld: cannot find crt1.o: No such file or directory /usr/bin/ld: cannot find crti.o: No such file or directory collect2: ld returned 1 exit status ... 我卸载了clang,但仍然无法正常工作。 有谁知道我该如何解决?
114 gcc  clang  ld 

4
cout是否同步/线程安全?
通常,我假定流不同步,这取决于用户进行适当的锁定。但是,诸如此类的事情cout在标准库中得到特殊对待吗? 也就是说,如果正在写入多个线程,它们是否cout可以破坏cout对象?我了解,即使同步,您仍然会获得随机交错的输出,但是可以保证交错。也就是说,cout从多个线程使用安全吗? 该供应商依赖吗?gcc是做什么的? 重要提示:如果您回答“是”,请提供某种参考,因为我需要某种证明。 我也不在乎底层的系统调用,这些很好,但是流在顶部增加了一层缓冲。
112 c++  gcc  c++11 

5
Linux中PATH_MAX在哪里定义?
我应该调用哪个头文件#include才能将PATH_MAX用作用于调整字符串大小的int? 我希望能够声明: char *current_path[PATH_MAX]; 但是当我这样做时,我的编译器(Linux上为Clang / LLVM)发出以下错误: recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX' char *current_path[PATH_MAX]; ^ 我试图做一个谷歌搜索,但仍然没有运气。 #include <limits.h> 不能解决问题/错误。 我是否也正确将PATH_MAX的值设置为int?
112 c  linux  gcc  include  clang 


3
为什么只有注释更改的两个程序二进制文件在gcc中不完全匹配?
我创建了两个C程序 程序1 int main() { } 程序2 int main() { //Some Harmless comments } AFAIK,在编译时,编译器(gcc)应该忽略注释和多余的白点,因此输出必须相似。 但是,当我检查输出二进制文件的md5sums时,它们不匹配。我也试图与优化的编译-O3和-Ofast,但他们仍然不匹配。 这是怎么回事 编辑:确切的命令和md5sums是(t1.c是程序1和t2.c是程序2) gcc ./t1.c -o aaa gcc ./t2.c -o bbb 98c1a86e593fd0181383662e68bac22f aaa c10293cbe6031b13dc6244d01b4d2793 bbb gcc ./t2.c -Ofast -o bbb gcc ./t1.c -Ofast -o aaa 2f65a6d5bc9bf1351bdd6919a766fa10 aaa c0bee139c47183ce62e10c3dbc13c614 bbb gcc ./t1.c -O3 -o aaa gcc …

11
如何使用GCC和ld删除未使用的C / C ++符号?
我需要严格优化可执行文件的大小(ARM开发),并且我注意到在我当前的构建方案(gcc+ ld)中,未使用的符号没有被剥离。 arm-strip --strip-unneeded所产生的可执行文件/库的用法不会更改可执行文件的输出大小(我不知道为什么,也许根本无法更改)。 修改我的构建管道的方式(如果存在)是什么,以便从生成的文件中删除未使用的符号? 我什至不会想到这一点,但是我当前的嵌入式环境不是非常“强大”,并且甚至节省500K了2M结果,从而极大地提高了加载性能。 更新: 不幸的是,目前的gcc版本我使用不具备-dead-strip选项和-ffunction-sections... + --gc-sections用于ld没有给出结果输出任何显著差异。 我感到震惊的是,这甚至成为了问题,因为我确定gcc + ld应该自动剥离未使用的符号(为什么还要保留它们?)。
110 c++  c  gcc  ld  strip 

4
如何链接到特定的glibc版本?
当我在Ubuntu Lucid 10.04 PC上编译某些东西时,它会与glibc链接。Lucid使用glibc 2.11。当我在具有旧版glibc的另一台PC上运行此二进制文件时,该命令失败,提示没有glibc 2.11 ... 据我所知,glibc使用符号版本控制。我可以强制gcc链接到特定的符号版本吗? 在我的具体用法中,我尝试为ARM编译gcc跨工具链。
110 linux  gcc  linker  glibc  libc 




11
GCC编译错误,代码> 2 GB
我有大量的功能,总计约2.8 GB的目标代码(不幸的是,科学计算无法实现...) 当我尝试链接它们时,我遇到了(预期的)relocation truncated to fit: R_X86_64_32S错误,希望通过指定编译器标志来规避-mcmodel=medium。除了链接之外,所有我可以控制的库都使用-fpic标志进行编译。 仍然,错误仍然存​​在,并且我假定链接到某些库不是使用PIC编译的。 这是错误: /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x12): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_fini' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': (.text+0x19): relocation truncated to fit: R_X86_64_32S against symbol `__libc_csu_init' defined in .text section in /usr/lib64/libc_nonshared.a(elf-init.oS) /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function …
108 c++  c  gcc  compiler-errors 

8
静态链接仅某些库
与GCC链接时,如何仅将某些特定的库静态链接到我的二进制文件? gcc ... -static ...试图静态链接所有链接的库,但是我还没有其中一些的静态版本(例如:libX11)。

3
如何防止gcc在C语言中优化某些语句?
为了使页面变脏(打开页面表条目中的脏位),我触摸页面的第一个字节,如下所示: pageptr[0] = pageptr[0]; 但是实际上,gcc将通过消除死存储来忽略该语句。为了防止gcc对其进行优化,我将语句重写如下: volatile int tmp; tmp = pageptr[0]; pageptr[0] = tmp; 看起来the俩有效,但有些丑陋。我想知道是否有任何指令或语法具有相同的效果?而且我不想使用-O0标志,因为它也会带来很大的性能损失。
107 c  gcc 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.