我在gcc的文档中找到了最高级的选项。
但是当我使用这个级别编译代码时,gcc告诉我不能识别这个标志。
我使用的是GCC4.5.2,它是最新发布的gcc。
那么哪个版本的gcc支持这个级别呢?
Tnanks.似乎表明这将在4.6发行版系列中提供(目前还没有稳定的发行版)。或者,您可以尝试从他们的SVN repo或其中一个镜像构建。Ofast标志是GCC 4.6中的一个新功能—请参阅。为了将来的参考,您所查看的文档是针对当前开发版本的。如果您按照主页上的“手册”链接进行操作,您将通过位于底部的“当
我正在运行Linux,Ubuntu 10.04
这不是我第一次尝试使用自动工具。我做了很多研究,并遵循了很多教程:以下是我想做的,我尝试过的,以及我面临的问题
目标:
使用libtool、autoconf和automake编译(然后交叉编译,但这将是另一项工作)我自己的C代码库
我尝试了什么以及我在哪里:
库名称为FXPLib,包名称为libfxplib-0.1
我的项目文件夹是:
Makefile.am (the only one)
include
include/fxplib.h (m
标签: Gcc
osx-lionpython-c-extension
我刚刚从SnowLeopard升级到Lion,我不得不更新的一个旧的python c扩展不想正确编译。我真的不知道在这里该怎么办。有谁能帮我把它编译好吗?在《雪豹》中,一切都很好
Home:folder Me$ python setup.py build
running build
running build_ext
building 'ccookies' extension
gcc -fno-strict-aliasing -fno-common -dynamic -arch ppc -arc
在哪里可以找到可以在clang和gcc中设置的所有可用警告和错误标志的列表?我查看了他们各自的文档站点,什么都找不到。GCC:。经典:mangcc。clang的手册页尚未填充,但由于它模仿了gcc的行为,许多gcc的-W选项也适用于clang。如果问题只是找到所有可能的gcc诊断(错误、警告等)消息的列表,您可以使用本地化实用程序的消息目录。使用GCC源代码tar ball,查看GCC/po/或libcpp/po/或libstdc++-v3/po/等
如果您只是询问用于获取这些消息的选项,请按照
我从下载了GCC 4.5,但当我尝试设置/构建时,出现以下错误:
Linux:>~/shared_scripts/bin/gcc/gcc-4.5.0 1040> /x/home/prakash_satya/shared_scripts/bin/gcc/gcc-4.5.0/configure CC="gcc -m64" --prefix=/x/home/prakash_satya/shared_scripts/bin/gcc/gcc-4.5.0 --with-gmp-lib=/usr/
我一直在用gcc编译我的C/C++代码,但直到最近我才意识到它不是唯一的免费编译器
我一直在玩弄切换,因为其他一些编译器,特别是clang,似乎表现出了很大的潜力。对于我的编译器,我的标准是立即遵守C99标准,随着C99标准变得越来越普遍,标准也越来越多,而且是免费的、开源的,并且尽可能以最佳方式编译我的代码。快速编译对我来说并不重要,但总是一个不错的选择。也就是说,如果有任何编译器看起来很快就会超过gcc,我想知道为了学习,现在是否值得切换
我将主要使用它来编译C++代码,所以这对我来说是优先
我正在使用Qt Creator生成一个库,虽然它可以工作,但它生成了文件的四个版本,据我所知,它们彼此相同,只是它们链接在一起。这些文件的标签如下:libFile.so、libFile.so.1、libFile.so.1.0和libFile.so.1.0。我只想保留libFile.so文件。如何防止生成其他文件并将其自动链接在一起?只有一个共享对象,其余的只是它的一部分。这就是共享对象命名在类Unix系统中的工作方式,以支持向后兼容性。在维基百科上阅读更多信息。qmake为共享库配置生成三个目标
标签: Gcc
inline-assemblyrelocation
以下代码编译成可执行文件,没有问题:
static const char *foo = "bar";
void main(void)
{
__asm__ ("mov %0,%%rax"
:
: "i"(&foo)
: "%rax");
}
但作为共享库,我得到一个错误:
static const char *foo = "bar";
void zot(void)
{
__asm__ ("m
我需要安装生成ELF的gcc交叉编译器,我发现这个站点-
它指向了一个用于home-brew-gcc_cross_编译器()的github,并将它们放入了home-brew公式中,但我不确定如何确切地将它们放入公式中
然后,如何将github代码下载到家用brew公式中以调用brew安装i386 elf gcc?下载的rb文件的存储目录是/usr/local/Library/Formula,然后运行brew命令进行安装
日志文件可在/Users/smcho/Library/Logs/Homebr
如果我想查看用gcc编译的可执行文件,以确定是否有任何变量定义供#define使用,是否有人知道要使用的命令
谢谢,您是否试图找出在构建它时定义了哪些值,或者编译它的源代码中存在哪些可能的定义(是否定义了值)?(注意,我认为这两种方法都不可能,但至少有一种是可能的。)#define宏是由预处理器扩展的,编译时在源代码中没有它们的踪迹,因此在可执行代码中没有它的踪迹。使用最新版本的GCC,您可能会在调试信息中记录宏,这取决于它是如何编译的。因此,基本上,定义是在make中设置的。e、 g给定mak
从一个星期以来,我一直在尝试编译一个用F90和C编写的代码。我一直收到一个未定义的符号错误。我将尽可能多地提供信息,但该软件包包含数百个文件,因此很难提供所有细节。这是生成文件
include paths.mk
include include.mk.$(OPT)
#------------------------------------------------------------------------------------------#
#----------------------
标签: Gcc
elfobjdumpdwarfreadelf
我编写了简单的x86汇编例程:
$ cat asm.s
.global foo
.section .text
foo:
nop
ret
并用
$ gcc -c -g asm.s -o asm.o
但是当我执行objdump--dwarf asm.o时,它不会显示任何有关函数foo的信息。看起来,gcc没有创建关于foo的
在使用约束构造函数的非常简单的情况下,测试参数的可转换性时,会在clang中产生错误,但在g++中不会产生错误:
#包括
模板
constexpr bool convertable=std::is_convertable::value&&std::is_convertable::value;
模板
结构A
{
模板
A(S常数&){}
};
int main()
{
A s=1.0;
}
也许这个问题与
clang给出的错误如下:
error: no member named 'value'
为了创建汇编代码,我调用了mipsel-openwrt-linux-uclibc-gcc编译器(Linaro-gcc 4.8-2014.04 r49389),其标志为-S。
这将生成如下所示的汇编代码:
.section .mdebug.abi32
.previous
.gnu_attribute 4, 3
.abicalls
.option pic0
.text
$Ltext0:
MIPS帧指针$fp占用一个字4个字节,但gcc决定在主函数的堆栈帧中分配的其他4个字节有什么用途,
是全局指针$gp吗?在MIPS体系结构中,堆栈帧的大小必须是8的倍数。Kane&Heinrich在MIPS RISC体系结构的p.D-20中对其进行了描述
我不熟悉汇编语言。似乎gcc不像MSVC那样在intrin.h中有_bitstandset函数,所以我实现了一个新的函数。这一个在linux中运行良好,但在winVista机器中,它与mingw出现错误,代码是:
inline unsigned char _bittestandset(unsigned long * a, unsigned long b)
{
__asm__ ( "bts %1, %[b]"
: "=g"(*a)
: [b]"Ir"
当我在mingw的网站上看到gcc版本4时,我设法下载并安装了新的软件包,但结果是在运行gcc并给出无意义的代码时出现了很多错误(create process error),现在我不得不回滚到原始的自动安装版本
我的问题是:有没有人成功地手动安装了mingw(使用gcc v4?我真的不知道“手动”是什么意思,我也不知道“sf.net”是什么。如果要安装MinGW,请从最新版本4.4.1下载并运行安装程序。您可以安装多个版本-我通常一次安装两个或更多版本
如果这不是您要问的问题,请澄清您的问题。手
我想编译一个带有.interp段的共享库
#include <stdio.h>
int foo(int argc, char** argv) {
printf("Hello, world!\n");
return 0;
}
我最终没有一个INTERP段,就好像我从未通过--dynamic linker=blah选项一样。使用readelf-l测试进行检查。因此。构建可执行文件时,链接器正确处理该选项,并在程序头中放置一个INTERP段。如何使其也适用于共享库?
今天,我一直在设置额外的VPS克隆,在使用最新的nginx开发版本(0.9.6)时遇到了一个奇怪且令人沮丧的编译时错误
我正在运行Ubuntu10.04.2LTSx86_64,但是,我已经将GCC升级到了4.6.1/configure运行时没有错误,但运行make-j4时出现以下错误:
gcc-c-pipe-O-W-Wall-Wpointer-arith-Wno未使用的参数-Wunused函数-Wunused变量-Wunused值-Werror-g-I src/core-I src/event-
-编辑-路径似乎有问题,无法找到其bin/文件夹。即使g++在这个bin目录中
我正试图在我的应用程序中在windows上启动g++程序,但出现以下错误。我怎么修理它?旁注:我可以在提示符下执行g++dummy.cpp,没有问题
ARGS>代码> -o文件.EX-XC++()
stdout
: CreateProcess: No such file or directory
-编辑-我的代码是
#include <windows.h>
#include <stdio.h&
生成我的项目时,将生成以下警告:
警告:不保护局部变量:可变长度缓冲区
我已经启用了堆栈保护器,并且已经指定了大小,但是这种情况仍然存在
-fstack protector all-Wall-Wstack protector-param ssp buffer size=2
您能建议一种在不关闭警告标志的情况下解决警告的方法吗?谢谢我相信看看哪段代码会产生这些漏洞会很有帮助。事实上,我不允许透露这些代码。但是,警告指向几个功能的开头,而不是功能中的确切部分:(我会说编译器查找堆栈上分配的空间,在某
标签: Gcc
hidesymbolsstripping
我需要隐藏一个特定的导出符号。
也就是“Uudivdi3”
但我不知道怎么做
我有一个脚本,可以在构建之后删除条带符号。
然后,我必须将二进制文件传递给第三方工具(包装器),该工具会抱怨这个导出的符号。
任何帮助都将不胜感激。请查看此讨论:
尝试strip-N\uudivdi3 objfile
标签: Gcc
avravr-gccavr-studio5
我想知道我是否可以告诉gcc/ld忽略输出文件中未使用的模块
假设我有模块a.c,b.c和c.ca.c和b.c相互依赖,其中一个包含main(),并且由于任何原因,未引用c.c的任何部分
gcc -c a.c
gcc -c b.c
gcc -c c.c
如果我将这些内容捆绑到一个库中,那么c.c中的任何代码都不会出现在输出中:
ar rcs abc.a a.o b.o c.o
gcc abc.a
但是如果我将.o文件直接提供给gcc,那么c.crespc.o
gcc a.o b.o c.o
标签: Gcc
Gdb
segmentation-faultmalloc
我写了一段代码来实现哈希函数。当将第9个元素“a12a”添加到列表中时,问题出现了,gdb报告如下,似乎问题发生在malloc应用内存的过程中。但在添加第9个元素之前,我曾经在添加第6个元素“ad”时成功地应用了malloc的一次内存,为什么第二次应用内存失败
Breakpoint 1, insert (p=0x3d2d10, value=0x4030e8 "a12a") at hashop.c:39
39 id = hash(value);
(gdb) n
40
gcc的最新版本正在生成对我来说毫无意义的程序集。我编译代码时没有使用任何优化;但是,这段代码的某些部分没有意义,即使没有优化
以下是C源代码:
#include <stdio.h>
int main()
{
int a = 1324;
int b = 5657;
int difference = 9876;
int printf_answer = 2221;
difference = a - b;
p
cpp:
当我试图与cygwin合作时,我遇到了以下错误:
LIBS=-l/home/C5021090/cppcms/cppcms -l/home/C5021090/cppcms/booster
all: hello
hello: hello.cpp
$(CXX) -O2 -Wall -g hello.cpp -o hello ${LIBS}
clean:
rm -fr hello hello.exe cppcms_rundir
同样的东西在UbuntuLinux上也能正常工作,我不
我试图构建一个调试版本的解压、编辑的makefile,但gdb仍然说“找不到调试符号”。生成输出的示例:
gcc -c -O3 -Wall -DASM_CRC -g -I. -Ibzip2 -DUNIX -DFUNZIP -o cryptf.o crypt.c
也许这里的国旗顺序有问题?这不重要。你确定二进制文件没有被剥离吗?再次检查Makefile。很可能正在调用strip。是的,准确地说,最后一行末尾有-s,谢谢。如果要调试,不建议使用-O3。这里的gdb可能更详细。一个bug报告不会
gcc编译二进制文件具有以下程序集:
8049264: 8d 44 24 3e lea 0x3e(%esp),%eax
8049268: 89 c2 mov %eax,%edx
804926a: bb ff 00 00 00 mov $0xff,%ebx
804926f: b8 00 00 00
对于函数func()中的以下语句,我试图找出指向malloc内存区域的变量名(在示例中为“dictionary”)
Void func() {
uint64_t * dictionary = (uint64_t *) malloc ( sizeof(uint64_t) * 128 );
}
插入指令的malloc()可以记录分配的开始地址和大小。但是,如果不知道将要分配给的变量“dictionary”,那么编译器端的任何功能都可以帮助解决此问题,而无需修改编译器以插入此类分配语句
我
我很感激任何帮助。Thx
更新:
使用g++时,我得到:
g++ -o WebPageCrawler -lawesomium-1-7 -Wall WebPageCrawler.cc
Unable to exec g++.real: No such file or directory
然而,在另一台机器上,我使用了gcc而不是g++,并且在那里工作得很好
更新2:
好了,现在我至少可以解决STDLIB的问题了。为此,我进一步安装了:
apt-get install build-essential
标签: Gcc
stackeigenmemory-alignmentvxworks
我正在使用Workbench3.0(vxworks 6.6)下的特征库(3.2.0)。此发行版中的编译器是GCC 4.1.2版
语言:c++;操作系统:winXP
问题代码如下所示:
Eigen::Matrix3d mOrigin;
/* initial mOrigin */
...
Eigen::Quaterniond qOrigin(mOrigin);
我调试了程序,发现当它运行时:
Eigen::Quaterniond qOrigin(mOrigin);
它显示断言并打印:
断言失败:
我有一个test main.cpp(不只是用于测试的真实项目)
印刷品:
real 0m4.759s
user 0m4.755s
sys 0m0.000s
real 0m40.516s
user 0m7.357s
sys 0m33.145s
但是当我在没有GLOB_NOCHECK标志的情况下构建时,时间会增加10倍
$ time ./a.out
印刷品:
real 0m4.759s
user 0m4.755s
sys 0m0.00
标签: Gcc
Arm
cross-compilingtoolchainbuildroot
我正在使用buildroot的工具链为ARM交叉编译应用程序。但是,某些应用程序需要未针对该工具链编译的库。我的主机工具链上有这些库,如-ljack、lfftw等
我需要知道,如果我得到了所需包的tarball,那么我如何配置它们,以便由armgcc编译库,并将头/库复制到buildroot的/usr和/include
通过这种方式,我应该能够通过buildroot的工具链访问这些库
谢谢,您需要将它们集成到Buildroot中
以fftw为例,在这种特殊情况下,fftw在Buildroot中已
gcc链接器有一个名为NOLOAD的指令,该指令允许链接节,但不在最终输出中加载。此指令放置在链接器分散文件中(请参见下面的示例)。IAR Workbench是否有等效的链接器指令?我目前正在为ARM V7.20.2使用IAR嵌入式工作台
MEMORY
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000
ram (rwx) : ORIGIN = 0x10000000, LENGTH = 0x00008000
}
SECTI
标签: Gcc
Arm
ldcompiler-optimizationavr-gcc
我正在使用GCCARM-none-eabi-g++(4.8.3)为ARM Cortex-M0 mcu编译代码。
一切都很好,但我注意到,当我包括并使用cstdlib中的任何函数时,该文件中的所有函数也都包括在内。如何摆脱它们
我只调用了malloc()和free(),但生成的ELF也有system()和isatty()机器代码
mcu只有32kB的闪存,因此~0.7kB的镇流器很重要,尤其是在其他报头不断出现这种情况时
现在我使用-ffunction sections-fdata section
gcc链接器链接归档文件还是对象文件(或两者)是否有区别?
背景:
在嵌入式项目中,ISR(当然没有被任何其他源代码引用)作为文件中的唯一函数。此文件被编译为目标文件,然后放入存档文件。
其他文件中的其他函数被编译为单独的目标文件。
无论链接器使用的是ISR对象文件还是ISR存档文件,二进制文件都是毫无怨言地构建的,并且在目标系统上运行,没有例外。
但是,如果使用存档文件,则不会链接ISR
另外,如果同一文件中有任何其他引用(例如,某个其他文件中某个其他函数使用的变量),则该引用将被完全链接。
有没有一种方法可以像#定义b a(%rip)那样,将b的每个实例都替换为a(%rip),这样movl$0,a(%rip)就可以缩写为movl$0,b?我试过b=a(%rip)和宏b;a(%rip);。endm但两者都不起作用。任何帮助都将不胜感激。您可以使用C预处理器对文件进行预处理,然后使用#define b a(%rip)。要使用C预处理器对文件进行预处理,请使用文件后缀.S而不是.S,并按如下方式进行组装:
a:.int 0
movl $0,a(%rip)
请注意,像这样的定义对读者来说
我想使用环境变量CPATH用GCC编译我的应用程序。GCC手册指出,分配给CPATH的路径列表必须用特殊字符PATH_分隔符分隔,该分隔符是在构建GCC时定义的。路径_分隔符通常为“;”在Windows和其他位置的“:”上
因为我想在多个平台上构建代码,所以我需要知道makefile中的字符路径分隔符(以便正确连接分配给CPATH的路径)
我可以问一下我使用的GCC,它是用哪个值作为路径分隔符构建的吗
(当然,我也可以尝试在GNU make中检测主机操作系统,并从中推测合适的路径分隔符,但这并不
我正试图通过Cygwin在Windows上本地构建gcc-7.1.0(我已经安装了gcc 5.4.0并开始运行)。我下载了tar,按照规定在自己的目录中运行了configure程序,产生了:
~/build-gcc
$ ll
total 609
-rw-r--r-- 1 Barry None 31021 Aug 12 09:08 config.log
-rwxr-xr-x 1 Barry None 33630 Aug 12 09:08 config.status
-rw-r--r-- 1 B
我想更改二进制文件中的字符串(新长度)。
使用对象文件(.o)更改字符串->编译->可以运行
但可执行文件无法运行在不破坏对象文件的情况下,无法移动对象文件中的字段。更改源文件中的字符串并重新编译。我不这样认为,可以更改可执行文件中的字符串,但它非常复杂。如果不破坏目标文件,则无法移动目标文件中的字段。更改源文件中的字符串并重新编译。我不这么认为,可以更改可执行文件中的字符串,但它非常复杂
在(第876页)中,我们可以看到LPC4088微控制器有一个非常特殊的启动程序:
这看起来完全是胡说八道,我需要有人帮我把事情弄清楚。。。在ARM的世界里,我无数次听到向量表是这样放置的:
reset: b _start
undefined: b undefined
software_interrupt: b software_interrupt
prefetch_abort: b prefetch_abort
标签: Gcc
compiler-optimization
我目前正在使用GCC4.7.4构建一个小型测试应用程序
我正在尝试一些优化选项。因此,我的问题如下:
有没有一种方法可以列出在给定优化级别(比如-O2)下启用的所有GCC优化?好吧,我确实找到了答案。这个命令对我起了作用
gcc -Q -O2 --help=optimizers
假设我有一个计划在使用SSE2的计算机上运行的代码,我希望编译器为SSE2生成代码。我可以看看GCC,看到奔腾m有SSE2和MMX,所以我可以做march=Pentium-m。如何使用类似于-march=sse3-march=mmx的东西来切换每个指令集?在列表的更下方,-msseetc msse允许您手动调用编译器的SSE内部函数。如果你不这样做,一切都不会改变。
我正在尝试从Google安装gtest,但即使我安装了gcc和g++,我还是因为某种原因出现了这个错误。我使用的是Ubuntu 18.04 64位。我和VisualStudio没有任何关系
-- The C compiler identification is unknown
CMake Error at CMakeLists.txt:47 (project):
No CMAKE_C_COMPILER could be found.
Tell CMake where to find t
标签: Gcc
linker-errorsbuilt-in
在Brian Gough的《GCC简介》一书的第14页,作者想展示一个链接器错误,因为没有向GCC提供libm库,函数sqrt的代码就在这里:
$ gcc -Wall calc.c -o calc
/tmp/ccbR6Ojm.o: In function ‘main’:
/tmp/ccbR6Ojm.o(.text+0x19): undefined reference to ‘sqrt’
文件calc.c(调用函数sqrt)如下所示:
我使用ldd calc发现libm.so共享库在运行时没有被
基本上,我正在尝试使用这些库,但我无法链接到它们。当我尝试使用redland库的简单basic程序时,会出现以下错误:
/usr/local/lib/librdf.a(rdf_init.o): In function `librdf_free_memory':
/home/ciaran/Software/redland/redland-1.0.17/src/rdf_init.c:671: undefined reference to `raptor_free_memory'
/usr/local
Andrei Alexandrescu在一篇文章中提到,当定义并使用“始终内联”宏时,gcc并不总是内联的,反之亦然。我找不到太多关于在中发生的场景的文档,所以有人告诉我
我找不到太多关于在中发生的场景的文档,所以有人告诉我
你能给出一个代码示例吗
将函数作为函数指针传递,并从不同的翻译单元调用它(即使是从同一翻译单元调用,假设优化为-O0或-Os,它的大小更好,或者更像是…“幸运”)将有效地禁止内联函数的可能性:
cat << EOF > main.c
__attribute
标签: Gcc
built-incompiler-flagsmeson-build
编译源文件src.cpp时,我需要将编译器标志-D_uudebug_FILE=“src.cpp”传递给g++。如何在介子中实现这一点?我知道cpp_args内置选项,但不知道如何在其中传递文件名
我知道,在make文件中,您可以编写类似于下面的代码来实现这一点:我正在寻找一种在介子构建中复制这一点的方法
test.o : test.cpp
g++ -D__MY_FILE__=\"$<\" -c $< -o $@
test.o:test.cpp
g++-
摘要:在gcc和clang编译器选项中的-f和-m代表什么
详细信息:
当使用clang时,我注意到许多编译器选项以-f开头,而其他编译器选项则以-m开头。我认为这是有历史原因的,我很好奇,所以我查看了gcc帮助,看到了以下内容:
以-g、-f、-m、-O、-W或--param开头的选项将自动删除
传递给gcc调用的各个子进程。为了
将其他选项传递给这些进程-W选项必须
被使用
如果让我猜的话,我想-f可能代表前端,-m代表机器。但我很想听到一个更全面的答案,可能包括gcc调用的其他子流程。我没
GCC选项-fno bit tests禁用的switch语句的位测试是什么
我正在查看并发现此选项是新引入的。在同一文档中,在提到的-fbit tests@ssbssa之前有一个示例代码,我想知道示例中的C代码将如何组装。您知道吗?
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 162 页