Gcc -Wextra它到底有多有用?

我正在阅读gcc手册,尤其是关于警告/错误标志的部分。在阅读了关于-Wextra标志的部分之后,我想知道它是否有用。它似乎在抱怨那些似乎相当主观的事情,或者说是一种品味问题。我对gcc没有太多的经验,我只是在大学的一些小项目中不时使用它,所以对于所有有经验的C/C++(或者对于使用gcc的任何语言),Wextra是怎么回事?,以及其他东西意味着: 如果比较始终为true或true,则发出警告 由于范围有限,始终为false 数据类型的,但不警告 常量表达式。例如 如果未使用无符号变量,则发出警告

在Ubuntu 64位上使用GCC4.5.2编译SUNDANCE 4.73

这听起来可能很基本/幼稚。。但是我已经很久没有接触C/C++了,对此我感到很失落 我正忙于开始opinionfinder,这要求我获得SUNDANCE 4.3.7。事实证明,要编译圣丹斯比我想象的要付出更大的努力 按照说明,我启动了install_sundace脚本,但出现了此错误。。。看来我的编译环境没有被正确检测到 我已经尝试过的几件事- install_sundance脚本使用c-shell。作为一项测试,我安装了C shell,并试图看看我的C编译环境是否仍然良好。那很好 我试着编写一个

Gcc 无法将portaudio库链接为静态库

我需要将库(portaudio)链接为静态库。当我做以下事情时 arm-none-linux-gnueabi-gcc -static -L/media/Data/lib/.libs -lportaudio prova.cpp 他没告诉我 /tmp/ccuoQi1J.o: In function `main': prova.cpp:(.text+0x190): undefined reference to `Pa_Initialize' prova.cpp:(.text+0x1bc): unde

Gcc c语言基础-_- #包括 int main() { INTA=2; int j=++a+++a+++a+++a; printf(“%d”,j); }

//请告诉我这个片段的执行情况。。。 //我正在使用GCC ubuntu(12.04)编译器-_- 我生成了汇编代码(适用于windows 7上的windows的gcc)[gcc-S test.c],并得到以下结果: #include<stdio.h> int main() { int a=2; int j=++a + ++a + ++a + ++a ; printf("%d",j); } 计算结果(请参见注释)后,调用printf函数,结果为19

Gcc 预处理器宏,用于在特定日期后编译时删除代码

我想不包括三行代码,如果编译后的某个日期。 原因是它们提供了向后兼容性。为了支持客户端和嵌入之间的交错发布,现在就需要它 一旦出现下一个软件版本,将放弃此支持,以迫使客户升级嵌入式软件。由于这是几个月后,有风险的这些线路被遗忘 所以理想情况下我想要一个 #if __DATE__ > MyDate code here #endif 或者类似的东西。 有没有办法做到这一点 *代码是用GCC编译的不幸的是,这不起作用,因为\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuu生

Gcc 创建和链接库

我正在尝试编译一个使用zeromq的程序。makefile的这一部分引用了zeromq库 LIBS=-lzmq -ldl -lsqlite3 $(OPTLIBS) 我在ubuntu上,库(libzmq.so)位于/usr/local/lib中。我不明白lzmq指的是什么。图书馆在什么地方登记了吗?如何定义lzmq所指的路径 选项-lzmq是一个链接器标志-l,后跟一个参数zmq。链接器标志-l告诉链接器链接库zmq。链接器将在不同的目录中查找具有该名称的具有不同形式的库。例如,在典型的POSI

使用GDB在GCC中调试特定过程

如何使用gdb调试GCC(cc1)中的特定过程 我想调试gcc中的“隔离路径”传递。我有一个gcc工具链内置选项,带有“-O0-g3” 我应该把断点放在哪里?如果是函数名,我们应该在哪里查找名称?这取决于您正在调试的gcc版本。在最新版本中,pass是某个基类的子类,您可以在特定的虚拟方法上设置断点。在旧版本中,它是类似的,但是IIRC是一个函数指针,而不是一个真正的方法。我建议搜索“隔离路径”,然后读取该文件

在将对象文件与GCC链接时,是否可以创建独立的抽象层?

我有一些文件,如: a.c a.h b.c b.h c.c c.h d.c d.h 其中a使用b,b使用c,c使用d 在编译时,是否有一种方法可以将a直接链接到b,而不是将它们全部包含在编译语句中 以某种方式使用: gcc a.o b.o 而不是: gcc a.o b.o c.o d.o 我想这样做,这样a就不必担心b、c或d是否使用任何其他文件实现,而是可以直接指向b.o 附带的问题是,有没有一种方法也可以执行一个通配符对象命令,像这样的命令也会递归地进入文件: gcc *.o 我很好

Gcc 无法grep指定格式的文本

我跑 我明白了 你怎样才能赢得比赛? Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. 请注意参数“-”,意思是“不要将下面的任何内容视为选项” 此外,如果您接受错误消息中的建议来运行“grep--help”,它会显示您还可以使用-e/--regexp选项显式设置模式 man gcc | grep -- "-L" 正如其他人所说,grep(和许多其他gnu命令)有一个“-”选项,

如何让C++程序与GCC的AIX堆栈保护功能链接?

我有点AIX新手。我正在尝试使用gcc的堆栈保护器功能编译一个程序。我使用pware的gcc包在服务器上安装了gcc,我可以编译如下示例程序: #include <stdio.h> int main(int argc,char **argv) { printf("hello world\n"); return 0; } 我在系统上找不到libssp_nonshared.a-是否需要安装其他软件包,或者是否应该随gcc软件包一起安装?这与libc无关:您的gcc安装缺少l

有人能解释gcc交叉编译器命名约定吗?

我试图理解gcc交叉编译器背后的命名约定,但似乎有相互矛盾的答案。我的系统中有以下三个交叉编译器: arm none linux gnueabi(用于linux的CodeSourcery arm编译器) arm none eabi(用于裸机系统的CodeSourcery arm编译器) arm eabi(安卓arm编译器) 在阅读GNU libtool手册时,它将交叉编译器命名约定指定为: cpu供应商操作系统(操作系统=系统/内核系统) 对于我的系统中的编译器来说,这似乎并不完全准确。GN

在ubuntu中安装gcc更新版本4.6

我还是一个在ubuntu中安装软件包的学习者。事实上,我在一年多前从一个torrent中复制了ubuntu的iso映像文件,我在Windows机器上使用Oracle Virtual Box运行,主要是用g++进行编译 当时我已经安装了GCC4.4.1。现在是gcc-4.6-20110610.tar.bz2。我不知道我的4.4.1包存储在哪里,但我正在本地文件夹中存储的4.6包。我的问题是: 1我的4.4软件包是否会受到此新安装的影响 2是否有一种方法可以在两种编译之间切换,无论何时我想说gcc-

让GCC编译而不插入对memcpy的调用

我目前正在使用为PowerPC440编译的GCC4.5.3,并且正在编译一些不需要libc的代码。我没有任何对memcpy()的直接调用,但编译器似乎在构建过程中插入了一个 有一些链接器选项,如-nostdlib、-nostartfiles、-nodefaultlibs,但我无法使用它们,因为我没有进行链接阶段。我只是在编译。比如说: $ powerpc-440-eabi-gcc -O2 -g -c -o output.o input.c 如果我用nm检查输出.o,我会看到对memcpy的引用

是否可以让GCC使用BOM源文件编译UTF-8? 我在微软和Visual Studio上在Windows和GCC上开发了C++交叉平台。

在VisualStudio中,我可以在代码中使用unicode符号,如“π”和“²”。Visual Studio始终将源文件保存为带有BOM(字节顺序标记)的UTF-8 例如: // A = π.r² double π = 3.14; 只有在我首先删除BOM表时,GCC才会编译这些文件。如果不删除BOM表,会出现如下错误: wwga_hydutils.cpp:28:9:错误:程序中出现错误'\317' wwga_hydutils.cpp:28:9:错误:程序中出现错误'\200' 这就引出了一

在ubuntu 11.10下编译GCC4.6.2时出错

在Ubuntu11.10下编译GCC4.6.2有一个问题。 该错误非常常见,即/usr/bin/ld:找不到crti.o:没有这样的文件或目录 我尝试在链接器可以找到crti.o的位置创建LIBRARY_PATH=/usr/lib/x86_64-linux-gnu,但配置抱怨在构建gcc时LIBRARY_PATH不应包含当前目录的路径 checking LIBRARY_PATH variable... contains current directory configure: error: *

如何将带-D的带引号的字符串传递给cmd.exe中的gcc?

使用gcc(可能还有其他编译器),可以在源文件之外定义宏,如下所示: c:\MinGW\bin\gcc.exe -DDEFINED_INT=45 foo.c -o foo.exe 这将把DEFINED\u INT定义为45,这在编译时可以看到 #include <stdio.h> int main() { printf("The define was: %d\n", DEFINED_INT); return 0; } 汇编如下: c:\MinGW\bin\gcc.ex

gcc-g与-fPIC冲突?

在CentOS 5.1 g++4.1.2、4.6.3和4.7.0下进行测试,结果都相同。我如何解决这个问题?基本上,我不能用调试构建来构建llvm [hidden]$ cat x.cpp #include <iostream> int main() { } [hidden]$ g++ -c -fPIC -g x.cpp [hidden]$ objdump -r x.o | grep R_X86_64_32 | head -10 000000000000001c R_X86_64

在ubuntu下使用gcc与英特尔mkl发生奇怪的链接错误

我想在一些优化问题中使用intel mkl,所以我使用intel示例来测试它。 test.cpp: #include <mkl.h> #include <stdio.h> typedef struct { double re; double im; } complex16; extern "C" void cblas_zdotc_sub(int, const void*, int, const vo

Gcc x86_64上的软浮点

我为一个没有FPU的嵌入式系统开发软件。我希望能够在我的桌面上用软件浮点库构建这个软件,以便获得更真实的性能视图。有人对如何实现这一目标有什么想法吗 到目前为止,我还没有在gcc中使用-msoft float方面取得多大进展。我目前正在考虑使用叮当声。通过使用标志-Xclang-msoft float-Xclang-no implicit float,并指定一个包含软浮点例程实现的库,我能够编译我的应用程序。当我试着运行它时,它总是会出错。据我所知,这是因为这个程序所依赖的库不是用软浮点编译的。

Gcc 理解_libc_init_数组

我从中查看了uu libc_init_数组的源代码。 但我不太明白这个函数的作用 我知道这些符号 /* These magic symbols are provided by the linker. */ extern void (*__preinit_array_start []) (void) __attribute__((weak)); extern void (*__preinit_array_end []) (void) __attribute__((weak)); extern v

带有-D选项的gcc编译器错误

我编写了一个编译多个文件的makefile。执行这样的行时: g++ -c -Wall -U DEBUG -U FILE -U HighPriority -U OnlyCUDA -U CUDA -U THREAD_NUM -U SIZE -U InputFileName -D FILE -D SIZE=32 -D THREAD_NUM=4 -D CUDA -D InputFileName=input/In32.txt ../src/lib/Globals.cpp -o Globals.o 它

如何检查gcc是否支持-march=native?

我注意到OSX雪豹上的gcc不支持-march=native。我可以在配置脚本中输入什么命令来检测该选项是否可用?以下命令似乎有效: echo "" | gcc -fsyntax-only -march=native -xc - 尝试用-march=native编译hello world并分析gcc的退出代码?类似于:echo'int main(){return 0;}>test.c&&gcc-march=native-o test.c,然后抓取$?创建一个var并使用它。@maverik。嗯

如何设置gcc选项-三月?

我通过键入gcc-target help命令获得gcc-march的帮助: 我试图设置-march=i686+nommx和-march=i686,+nommx,但不正确!gcc报告的错误:错误:错误值i686,+nommx代表-march=开关 我想在没有mmx目标的情况下将我的程序构建到i686,如何设置-march选项?i686不在您提供的列表中,因此出于好奇,如果您使用明确列出的内容会发生什么情况?您的gcc版本是什么?我已经解决了这个问题。它应该通过使用-Wa,-march=i686+n

Gcc 对“lzma”代码的未定义引用';

我尝试打包我的应用程序并静态链接所有库。但是我得到了这个错误。Makefile如下所示: CC = gcc INCPATH = -I/home/johnny/Application/FileBasedReG/include/RealityGrid LIBS = -L/home/johnny/Application/FileBasedReG/lib/RealityGrid -lReG_Steer -l:libxml2.a -l:libncurses.a -l

Gcc 条件解析-可能吗?

我需要使用相同的语法实现2遍编译器。第一遍只使用很少的规则。第二遍使用完整的语法。我正在寻找在每次传递中使用哪些规则的标记,比如ifdef ifndef(没有额外的“噪音规则”) 有没有一个简单的方法 第二个问题;是否有办法“捕获”EOF并在文件末尾具有“备用”状态,以便下一个文件(下一个pANTLR3_输入_流)平滑地延续上一个文件 实施它的最佳方式是什么 谢谢您可以使用语义谓词来允许解析器遵循以下特定路径: remove_partitioning: {SERVER_VERSION &

Gcc 为64位配置Mingw64

我正在尝试配置Mingw64(mingw-w64-v3.1.0.tar.bz2) 我运行了/configure,收到了以下消息 configure: Configuration Options Summary: configure: configure: WinCE runtime........: no configure: Win32 runtime........: yes configure: Win64 runtime........: no 配置本身很好。我能够安装它

如何在嵌入式linux Raspberry Pi上安装GCC和/或apt

我在raspberry pi上预先配置了linux发行版(用于比特币矿工)。 问题是这个发行版非常小,只有用于基本命令的busybox。它没有包管理器,甚至没有gcc编译器。所以我的目标是在它上面安装一个gcc编译器,这样我就可以进一步安装其他软件 因此,我基本上仅限于来自busybox的以下命令: root@raspberrypi:~# ls /bin addgroup fgrep ping6 adduser gr

为什么gcc要为char缓冲区分配更多的空间

我有点被gcc的最新版本弄糊涂了。编译了一段简单的代码: int main() { char buffer[1]; scanf("%s",buffer); printf("You Entered %s\n", buffer ); return 0; } 当我拆卸func时,我发现: (gdb) disas main Dump of assembler code for function main: 0x0804846d <+0>: push

Gcc fortran if条件不适用于逻辑自模块

我在fortran程序下工作,遇到了if语句的奇怪行为 我的模块与主程序位于同一文件中: module platform character (*) SLASH, NULLDEV, COPY_CMD, MKDIR_CMD parameter (SLASH="\", COPY_CMD="cp -r ", NULLDEV="nul", MKDIR_CMD="mkdir") !parameter (SLASH="/", COPY_CMD="cp ", NULLDEV="

Gcc “编译错误”;'中的不可能约束;asm&x27&引用;

我试图在我的“SunOS sun4v 5.10”系统上编译Csmith,但我遇到了如下错误: platform.cpp: In function 'long unsigned int platform_gen_seed()': platform.cpp:78: error: impossible constraint in 'asm' 谁能告诉我哪里出了错 #if (TARGET_CPU_powerpc == 1 || TARGET_CPU_powerpc64 == 1) /*For PPC,

Gcc 链接成功,即使找不到库,为什么?

即使未找到libthrift,以下链接也会成功: $ g++ --std=c++11 ../gen-cpp/SharedService.cpp ../gen-cpp/shared_types.cpp ../gen-cpp/tutorial_types.cpp ../gen-cpp/Calculator.cpp ./client.cpp -lthrift $ ldd ./a.out linux-vdso.so.1 => (0x00007ffd35dfe000) libthr

GCC交叉编译器目标库安装目录

我正在使用以下/configure命令构建GCC 5.2.0交叉编译器: /gcc-5.2.0/C++——前缀=/Ur-构建= x86y64-ununn-Linux uN-GUU---主机= x86y64-unNeN-LIUX-GNU--目标= x86y64-MyoS- LIUX-GNU--禁用NLS——启用语言= C,C++ +带有SysRooSt/MyOS——用本机系统头DIR=/包含 < /P> 因此,构建平台和主机平台都是x86\u 64-unknown-linux-gnu,目标平台

Gcc 将默认值写入eeprom

这是我的设置: Atmel studio 7.0 avr-gcc ATmega644PA 我正在尝试将默认值写入eeprom。我的意思是:在代码中,eeprom中特定位置的预定义值 我可以使用: __attribute__((section(".eeprom"))) 它可以将变量放入eeprom,但这会将变量自动链接到一个位置。 我想手动设置变量的存储位置。我该怎么做 谢谢 Ps:这需要对>300个变量起作用您可以将所有变量放在一个结构中。变量将按指定顺序放入EEPROM中 struct {

Gcc golang在构建有cgo和无cgo时使用的汇编程序

假设我有一个golang包,其中包含一些汇编代码: demopkg/ source1.go source2.go asm_amd64.s 如果我尝试使用go build构建它,工具链将使用go tool asm来组装*.s文件 但是如果我将Cgo添加到混合中,通过将单个import“C”放入任何源代码中,go将切换到gcc汇编程序 我可以通过执行go build-n来查看它。第一个案例中对/usr/local/go/pkg/tool/linux\u amd64/asm的调用

Gcc clang和llvm opt中可用的优化列表

可以通过GCC--help=optimizers获得GCC/G++中可用的优化器列表。合法值和参数范围也在params.def中定义。 是否有这样的命令和params.def文件也可用于clang?1-对于clang使用: clang -OX -mllvm -debug-pass=Arguments foo.c llvm-as < /dev/null | opt -OX -disable-output -debug-pass=Arguments 或 其中,X可以是Os、O1、O2、O3

放弃GCC中未使用的函数

我需要一些关于在MinGW下使用GCC编译的帮助 假设我有两个文件: a、 c包含两个函数a1和a2 b、 c包含两个函数b1和b2 然后我将这两个对象链接到一个共享库中。使用的命令如下所示: gcc -c a.c gcc -c b.c gcc -shared -Wl, --version-script v.ver -Wl, -Map=out.map -Wl, --strip-all -o mydll.dll a.o b.o v、 它看起来像: mylib { global: a1;

Gcc EGLMake电流触发的堆栈保护

我们遇到了一款奇怪的设备,名为Motorla RAZR i,拥有x86 CPU和安卓4.1.2版(大约2013年) 本机代码中的GL操作有时会导致此设备崩溃。我们最终将此错误减少为几行无辜的函数调用: void stackCorrupt() { const EGLint configAttrs[] = {EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE}; const EGLint contextAttrs[] = {EGL_CONTEX

Gcc Anaconda cython制造的模块正在寻找错误的GLIBCXX

让我解释一下情况 使用系统G++(Linux下)编译C++库。 然后构建了一个cython模块,该模块调用预编译库中的函数。cython模块的构建是在anaconada venv下完成的(但venv内没有安装g++。因此cython必须使用系统gcc/g++)。 现在,在相同的anaconda venv下,导入cython模块会导致以下错误: anaconda3/envs/hspy/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (r

GCC编译器会默认考虑十六进制整数常量变量作为无符号int吗? #包括 int main() { int-ret=-1071; 如果(ret==0xfffffbd1) { printf(“哈哈哈”); } 返回0; }

为什么GCC编译器会将常量变量0xfffffbd1识别为无符号int,因为条件ret==0xfffffbd1C标准规定,整型常量的类型是可以表示其值的对应列表的第一个(C99第6.4.4.1/5段),对于没有后缀的十六进制类型,名单如下: int unsigned int long int unsigned long int long-long-int 无符号长整型 假设一个32位的int类型,0xfffffbd1大于int\u MAX,但小于UINT\u MAX,因此常量的类型是无符号in

Gcc `mov';的操作数类型不匹配;

我想要eflags值,但我得到了错误 operand type mismatch for `mov' 这是我的密码: int a0 = 0, b0 = 1; short c0; // asm("cmp %1, %2\npushf\npop ax\nmov ax, $0": "=r" (c0): "r" (a0), "r" (b0)); asm("cmp %1, %2\n lahf\n mov %%ax, $0": "=r" (c0): "r" (a0), "r" (b0): "ax");

Gcc 如何将c样式字符串(函数参数)放入特定部分?

我想在一个名为.xip.text的特定部分中放置一些函数, 但只读数据不能放入该部分 以下是我的测试代码: #include <stdio.h> void foo(void) __attribute__((section (".xip.text"))); void foo(void) { printf("hello world\n"); } 链接后,函数文本被放置在.xip部分,但字符串 hello world\n不在同一节中。如何解决 我可以把整个文件放在.xip部分

自定义gcc 4.6.3和gcc 5.4.0包含搜索列表不同

我需要在Ubuntu 16上构建一些旧的gcc版本。主要目标是4.6.3,但我似乎有一个包含搜索列表的问题。 使用此编译器的生成失败,因为找不到sys/cdefs.h。我已检查编译器的包含搜索路径: $ gcc -xc -E -v - <…stripped…> #include <...> search starts here: <company specific path>/include /usr/local/include <company spe

未找到libssh符号错误gcc

我正试图从Wil Allsopp的笔测试书中构建一个简单的SSH客户端。在Mac OS High Sierra上使用gcc-4.2,并使用自制程序安装libssh。最简单的代码版本是: #include <libssh/libssh.h> #include <stdlib.h> #include <stdio.h> int main() { ssh_session my_ssh_session; my_ssh_session = ssh

__带gcc的int128对准段故障-O SSE优化

我使用\uuu int128作为结构的成员。 它与-O0(无优化)一起工作 但是,如果启用优化(-O1),则会因段故障而崩溃 它在指令movdqa处崩溃,该指令需要var按16对齐。 而地址是由malloc()分配的,它只按8对齐 我试图通过-mno SSE禁用SSE优化,但未能编译: /usr/include/x86_64-linux-gnu/bits/stdlib-float.h:27:1: error: SSE register return with SSE disabled 那么,如

Gcc 如何将_uasm__;转到内联程序集

我正在使用GCC编译器。我想在C中插入一些内联指令。使用\uu asm\uu指令成功插入非分支指令,如下所示: __asm__ volatile ( "add %[my_out], %[my_op1], %[my_op2]\n" : [my_out] "=&r" (array[3]) : [my_op1] "r" (array[0]),[my_op2] "r" (array[1]) ); 但是我不能插入

Gcc 用于读/写XMM&;的内联汇编代码;YMM寄存器?

我有两个变量来模拟X86 XMM&YMM,如下所示: uint64_t xmm_value[2]; uint64_t ymm_value[4]; 现在我想使用内联汇编来读写XMM/YMM寄存器 如何编写GCC内联程序集以将xmm_值复制到寄存器XMM0 如何编写GCC内联程序集,将寄存器YMM0复制到ymm_值 我已经尝试搜索执行此操作的示例内联程序集,但找不到任何好的答案。谢谢 因此,在一些帮助下,我编写了这段代码,它编译得很好。我对XMM使用movups,对YMM使用vmovups,

gcc链路故障';对';的未定义引用;,路径相关

c代码使用的函数“tfm_hello_world_Moin”包含在“libtfm_s_Moin.a”中,链接失败: arm none eabi/bin/ld:build/main_blinky.o:in functionhello_world:main_blinky.c:(.text+0xcc):对tfm_hello_world_单板的未定义引用 collect2:错误:ld返回了1个退出状态 链接: 更改为绝对路径后,可以: OBJ_FILES += ~/code/tfm/trusted-fi

上一页   1   2   3   4    5   6  ... 下一页 最后一页 共 163 页