我目前正在重构一个C项目,向我发出大约1000条警告。
是否有方法突出显示和过滤这些警告。
(例如,将所有索引警告设置为红色、未使用的蓝色和其他颜色)
很可能有些IDE可以做到这一点,但这对我来说不是解决方案。试试这个。我还发现了另外三个包:,或,或在emacs中编译给您带来了一些亮点。可以推测,这些细节可以定制
使用M-x compile并发出常用的构建命令(默认为make-k)。这个答案更多地介绍了重写旧C代码的一般方法
大量警告通常是同一小组警告的重复,因为头文件中存在一些错误,而其他源代
这是家庭作业的一部分。我们要做的是编写一个makefile来编译以前的家庭作业解决方案。这些解决方案是由教授提供的,它们将用于测试我们的makefile。其中一个文件的#include“quicksort.c”
我知道这样的用法是不鼓励的,但这对我并没有什么帮助:)
编译这两个文件(文件quicksortTest.c,其中包括quicksort.c,以及quicksort.c本身)的最佳方法是什么
目前,我的makefile中包含以下内容:
quicksort: quicksort.c
我试图在cygwin上构建boost,但我找不到让bjam开始编译的方法。也许我错过了什么。有人能给我一个线索吗?仅供参考:我收到以下错误消息
$ bjam --without-python --without-serialization toolset=gcc-android4.4.3 link=s
tatic runtime-link=static target-os=linux --stagedir=android
warning: mismatched versions of Boost
我试图在我的x64 Arch Linux上运行xdebug,但没有成功。我已经安装了它,现在当我尝试运行lampp时,它会说:
Failed loading /opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so:/opt/lampp/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so: wrong ELF class: ELFCLASS64
我做了一些搜索,发
考虑以下代码片段:
long long someVar64 = 0LL;
int someVar32 = someVar64;
如果不明显,这里有一个潜在的错误,64位值被分配给32位值,导致位丢失。在这种情况下,这很好,因为我们不关心0的高位,但是如果我更改常量,我很容易创建一个bug
为什么GCC(4.4.3)不为此代码生成警告?我记得以前的版本曾经使用过。此警告由-Wconversion启用。请注意,它不是由-Wall或-Wextra启用的
-Wconversion
警告可能改变值的隐式
我最近在基于i686的linux机器上安装了一个mips-linux-gnu-gcccrosstool。当我想编译一些代码时,它向我显示了这个错误
每一个安装步骤都有一个
安装crosstool后,我编写了一个简单的helloworld C文件,如下所示:
#include<stdio.h>
int main(void)
{
printf("Hello World!\n");
return 0;
}
编译器刚打印错误:
我试图在Linux中从源代码构建libshout,但遇到了一个似乎无法解决的错误。My./configure命令运行时没有错误,但运行make时出现以下错误:
/usr/bin/sed: can't read =/usr/lib/libogg.la: No such file or directory
libtool: link: `=/usr/lib/libogg.la' is not a valid libtool archive
make[3]: *** [libshout.la] Err
“-xW”标志的作用是什么?
我看到在链接阶段,有时会向gcc/icc提供这些信息。叮当声打断了这个,说:
clang: error: language not recognized: 'W'
用法示例:这只是一个ICC选项:
-xW -- Can generate SSE2 and SSE instructions, and it can
optimize for Intel(R) Pentium(R) 4 processors and Intel(R)
我将用一个简化的例子来解释我的情况
我有两个libme.so文件,它们有不同的实现,我已经验证了它们可以同时在单个设计中工作。一个位于./root/v1/,另一个位于./root/v2/
我的“main”.so文件与这两个libme.so文件链接,位于./root/libtest.so
现在,我有一个要求,使事情重新定位。也就是说,如果我将整个“根”目录复制到另一个位置,甚至是另一台机器(假设二进制兼容),事情仍然可以正常工作
我的问题是,为了使这项工作正常进行,我应该使用什么gcc命令行来构建
我已在我的工具链中成功安装了gccfilter()。过滤器实际上应该可以工作,因为所有perl模块和其他东西都已安装。问题是,当我使用例如以下命令行时,它不能正常工作:
gccfilter -c -a g++ -std=c++11 -O3 -DNDEBUG -I/"tonnes of includes" -o CMakeFiles/...../main.cpp.o
-c /...path.../App/main.cpp
.../variant.hpp:17:0,
我正在做一个嵌入式系统的项目,使用ARM M0
必须创建一个ROM应用程序,其唯一目的是在ROM中存储内容,并在需要时初始化数据和bss部分
到目前为止,加载脚本如下所示:
MEMORY
{
rom (rx): ORIGIN = 0, LENGTH = 32K ;
ram (!rx): ORIGIN = 0x10000, LENGTH = 8K ;
}
SECTION
{
. = ORIGIN(rom) ;
.text:
{
KEEP(*(.text)) ;
所以我的问题是我有一组C文件(很多),
我还有另外一组已经编译过的c文件,它们被转换为type.o(对象)和.d(依赖项)
我的问题是:
现在在我的项目中,我必须添加第二组对象文件,并成功编译完整的支架,并从中创建一个二进制文件
实现这一目标的不同方式有哪些(利弊)
所需信息:
-C汇编
-GNU工具链
-Hightec编译器
如果需要更多信息,请告诉我假设您不再需要接触第二组(目标文件集)的源代码,并且它不包含对第一组(.c文件集)的依赖,我只需将其所有.o文件塞进一个单独的库中,然后在最
了解openmp指令的pthread调用的gcc命令行语句有哪些?我知道在汇编、gimple、rtl和树中生成IR文件的-fdump命令行语句。但是我无法为openmp指令获取任何pthread转储 GCC不会直接将OpenMP pragmas转换为Pthreads代码。相反,它将每个OpenMP构造转换为对GNU OpenMP运行时库libgomp的一组调用。您可以通过使用-fdump tree all进行编译来获得中间表示。查找扩展名为.ompexp的文件
例如:
#include <
我想检查数组的所有行是否存在逻辑条件。我使用了GNU GCC指南中描述的函数ALL
下面是一个示例代码:
program test3
implicit none
real, allocatable, dimension (:,:) :: mat1
integer :: i,j,k,r
logical :: lg
r=3
allocate(mat1(r,r))
mat1=transpose( reshape( (/-1,-2,-3,-4,-5,-6,-7,-8,-9/), (/3,3/)))
lg
我计划在我的项目中使用MinGW-w64的草莓Perl构建。所以,我想知道草莓Perl是与完整的GCC编译器(MinGW/MinGW-w64)捆绑在一起的,还是只是它使用的组件
我在gcc中使用内联汇编程序(在Linux下)。
我写了一个简单的程序:
char *str="hello world";
int main(int argc, char *argv[]
{
...
asm("mov %0, %%rcx"
:
: "g" (str));
我正在尝试编译一个程序,它是一个化学排放预处理器
这是它的编译过程的官方教程
我已经上传了原始源代码
通过预定义netcdf_dir,源代码应该编译好
但是当我使用/make_util megan_bio_emis时,错误显示如下:
=========================================================================
Using gfortran fortran compiler
========================
我有一个由第三方提供的库,文件名是libPXTrader.so。但我想把它重命名为trader.so,在我的项目中。所以我把它改名了。奇怪的是,在我使用
gcc main.o third_party/lib/trader.so -o main
可执行文件main仍然链接到libPXTrader.so。
使用命令
ldd main
它表明找不到libPXTrader.so。我使用了strings trader.so并找到了字符串libPXTrader.so,我将这个共享库名称硬编码到so文件中
我想在记事本++中创建一个run命令,每当我按下Ctrl+M时,该命令都会清除/删除已编译的文件。到目前为止,我创建了以下代码行:
cmd /k c:\WinAVR-20100110\utils\bin\make.exe make clean $(FULL_CURRENT_PATH)
它不工作,并发出以下警告:
没有规则使目标变得干净
这在技术上意味着参数是错误的,但是我没有找到一种方法来纠正它
任何建议您都不希望将make作为参数传递给make,因为这样它将查找名为make的未定义目标
此外
标签: Gcc
inline-assemblycortex-mthumb
我使用的是Cortex-M0+设备(仅限拇指),我试图在ram中动态生成一些代码,然后跳转到它,就像这样:
uint16_t code_buf[18];
...
void jump() {
register volatile uint32_t* PASET asm("r0") = &(PA->OUTSET.reg);
register volatile uint32_t* PACLR asm("r1") = &(PA->OUTCLR.reg);
regis
我正试图通过gcc编译c文件并获得
错误
代码
GCC中的内联程序集是正常的字符串,遵循C或C++中的常规规则(无论您在编程中)。
这意味着相邻的文本字符串之间只有空格或注释,它们将被连接成单个字符串
你认为是什么
asm(
"mov %al, 'H'"
"int 0x10h"
);
从编译器的角度来看
asm(
"mov %al, 'H' int 0x10h"
);
上述说明无效
这就是为什么,如果您查看许多GCC内联汇编的示例,那么在每一条装配线之后都需要换行。
在Ubuntu14.04(相当旧的配置)上用GCC4.8.4在CUDA7.5上编译程序时,我遇到了这个错误
error: identifier "__shfl_down" is undefined
detected during instantiation of "T gmx_shfl_down_sync(unsigned int, T, unsigned int, int) [with T=float]"
指向哪一点
template <typename T>
st
GCC为下面的shuffle()生成以下代码:
理想情况下,这应该是:
pshufb xmm4,XMMWORD PTR [rip+0x125]
生成这条指令的扩展ASM语法是什么
非常感谢,,
亚当
PS:注释掉的内在函数为这个例子生成了最佳代码。这通常不起作用(在存在全局寄存器变量的情况下,GCC可能会生成不必要的寄存器副本)
#包括
typedef int8_t xmm_t___属性(向量大小(16));
常量xmm_t xmm_shuf={128,0,1,2,3,4,5,6,8,9,10
我在freebsd上,试图从以下位置运行uhd:这通常应该在freebsd下运行,但当我尝试按照此处指定的方式构建它时,会遇到问题:
我得到:
[ 73%] Building CXX object examples/CMakeFiles/benchmark_rx_rate.dir/benchmark_rx_rate.cpp.o
Linking CXX executable benchmark_rx_rate
../lib/libuhd.so.003.000: undefined referen
我正在尝试在我的应用程序中使用。创建项目将在.libs文件夹中生成一个libjpeg.a。我想做的是在链接阶段使用这个文件。我尝试了以下方法:我将libjpeg.a复制到C代码所在的文件夹中。试图与
gcc libjpeg.a mycode.c -o executable_name
失败了。如果我使用gcc-ljpeg-mycode.c,那么当我将标题改为指向而不是“libjpeg.h”时,编译是成功的,但这显然链接到库的系统范围动态版本
尝试与相对或绝对路径链接也会失败:
gcc ./lib
如何在Qt Creator中导航编译器错误?一,
我是否缺少gcc设置?二,
例如,当我单击一个错误时,我希望Qt打开指向右行的正确文件
这是C++。我有一个Qt Creator项目。Creator基于Makefile
是否有其他环境可以使用.creator文件执行此操作?3.
例如,CodeLite?这应该是可行的。您正在运行哪个版本的Qt Creator?什么操作系统/发行版?QtCreator 1.3.1,基于Debian上的Qt4.6.3 64位。奥拉夫:啊,那确实很旧了。不记得那时候它
我目前正在尝试在最新更新的Ubuntu11.10上构建GCC4.4。然而,在尝试引导时,构建编译器总是会因一些问题而失败
找不到第一个crti.o和crtn.o。我将它们符号链接到搜索路径中的另一个目录中,这样我就可以得到一个引导编译器。但是,现在它失败了,并显示以下消息:
$ ./host-x86_64-unknown-linux-gnu/prev-gcc/xgcc test.c
xgcc: error trying to exec 'cc1': execvp: File or directo
这是关于一些使用公共makefile的arm汇编代码,但是对于需要预处理的文件(xxx.S)和不需要预处理的文件(xxx.S),它们的行为不同。在我的makefile中,我有以下内容:
ASFLAGS += --defsym BACKDOOR_ADDR=0xC0004000
这似乎适用于所有未经预处理的旧程序集文件(xxx.s)。现在我有一个确实需要预处理(xxx.S),我得到了以下错误:
我试过这个:
ASFLAGS += -Wa,--defsym,BACKDOOR_ADDR=0xC0004
我正在创建一个GCC插件,它需要在预处理之前将代码作为文本注入当前翻译单元
这段代码非常重要,是从提供给插件的外部文件动态生成的
我知道可以构建_decl等,将节点注入AST,以在插件_START _单元上实现相同的效果,但我可以想象,在GCC处理之前以文本形式注入代码更简单
另一种方法是编写一个单独的程序,在传递给GCC之前将生成的代码和翻译单元合并到一个中间文件中,但这会使行号有一定的偏差
这可以通过GCC插件实现吗?有一个外部程序发出#行指令,并且完全不依赖编译器。这个插件已经做了很多其他
我在一个嵌入式设备上工作,有一些代码最初是使用IAR编译器编译的
我试图使用GCC编译器重新编译上述代码
有一条特殊的语句:typedef\uuu IO,它根本无法编译(“无法识别的符号错误”)
有人能建议我如何正确编译此语句吗?如果无法识别,则是因为未包含包含定义的适当系统标题
它将在随工具链提供的芯片支持头文件中定义。它是类型限定符,或者更确切地说是一个宏(#define),将扩展为类型限定符。例如,它的用途如下:
__IO uint8_t CSSR;
这里的类型是uint8\t,因此u\
我有一个在Linux环境下用gcc-bison-flex编写的项目。所有项目都实现为一个*.so文件,并从python tkinter graphic surface调用。
需要在windows上运行它。然而,我避免安装所有与gcc-bison-flex相当的windows程序。
是否有可能在LINUX环境中强制gcc编译WINDOWS DLL而不是*.so?使用与我现在相同的技术可以使生活变得更轻松:只需从python tkinter graphic surface调用即可。当然,您可以交叉编
我需要生成一些简单的obj/o文件,其中包含我的二进制文件
程序体我需要写一些非常简单的部分汇编程序
我需要生成这样的obj二进制文件,我可以使用一些链接器来链接并运行我的过程。我想知道
1最简单的obj格式是什么?我需要一些我可以最终与gcc链接的东西,但如果有人认为更容易,就我所知,有一些工具可以将一种obj格式转换为另一种,因此我可以使用thic转换器
2我想知道生成这个obj上下文的代码是什么样子的-假设我有二进制asm内容要刷新,但我只需要在它周围创建obj信封
我甚至不需要刷新多个过
假设我有一个插件,我使用gcc-fplugin=foo加载它
是否有任何定义的预处理器符号或宏,我可以使用它们有条件地编译出插件所需的语言特性
当然,我可以在命令行上提供该宏,例如-Dplugin\u foo\u loaded
但是如果这些宏是通过加载插件生成的,那就更好了
答案是什么?目前GCC4.9不能这样做,因为没有与预处理器相关的插件挂钩
我想最简单的方法就是通过a-DMYPLUGIN。或者在插件中定义一些内置元素
< PS. >如果你正在寻找一些关于GCC插件的教程材料,也可以考虑一些
当我编译时:
short foo (short x)
{
__asm ("mov %0, 0" : "=r" (x));
return x;
}
我明白了
我不想要额外的指令sxth有符号提取半字
它之所以存在,是因为本例中的ABI ARM AEABI要求将函数返回值符号扩展到完整寄存器,但GCC不知道我的汇编代码可能对它提供给我的寄存器做了什么
我如何告诉GCC我承诺保持寄存器正确的符号扩展,这样它就不必插入这个额外的指令
我本以为它可以从我给它一个简短的表达式作为=r约束的表达式的
我在运行不同版本的gcc的计算机上共享我的.gdbinit脚本(通过NFS)。如果我正在调试的代码是用特定的编译器版本编译的,我希望执行一些gdb命令。gdb能做到这一点吗?我想到了这个:
define hook-run
python
from subprocess import Popen, PIPE
from re import search
# grab the executable filename from gdb
# this is probably not general eno
我在试着诊断一个问题。问题是如果我在程序的开头放一个printf(特别是printf),我的程序就可以正常工作,如果我不放,它就不能正常工作。这个问题非常特定于一个循环,该循环读取我在systick_处理程序中递增的systick变量
但是,如果我使用-fno-common编译,那么一切都正常。为什么会有这种行为
此外,我已经从我的链接器脚本中删除了.COMMON部分,因为它们使程序的大小几乎增加了一倍。不管怎样,没有它们,一切都运行得很好,但我怀疑它们的缺失是在我使用default(-fcom
代码:
跑步:(不重要)
美元/测试
v_标志=51914,&v_标志=0x601034
v_标志=51915
阅读符号表:
$ ./test
v_flag = 51914, &v_flag=0x601034
v_flag = 51915
$gcc—版本
gcc(gcc)4.4.7 20120313(红帽4.4.7-8)
...
$ld--版本
GNU ld版本2.23.52.0.1-16.el7 20130226
...
$readelf-s测试
符号表“.dynsym”包含4个条目:
Nu
标签: Gcc
windows-7-x64mingw-w64strawberry-perlframa-c
我想使用frama-c进行静态c代码分析。我已经花了一些努力来正确安装它(希望如此)。这些文件位于C:\code分析\frama-C。我想通过Windows控制台应用它,例如:
C:\code分析\frama-C\bin\frama-C hello.C
c只是一个简单的hello world程序(顺便说一句,我不是c程序员,也是编程新手)
是的,我安装了Perl,但不知道Frama为什么使用它。在我看来,stdio.h似乎有点问题。这可能是吗?但是我可以成功地编译我的程序
C:\草莓\C\bin
当我编译这个简短的程序时
#include <math.h>
#include <stdio.h>
int main(void) {
long double ld = logl(1L);
printf("logl = %Lf\n", ld);
}
include文件math.h包含在/usr/include/math.h中
$ gcc -M foo.c
foo.o: foo.c /usr/include/math.h /usr/incl
标签: Gcc
dwarfobjcopyaddr2line
有没有办法强制gcc只生成完整调试信息的子集,这些信息足以满足addr2line实用程序的需要?或者有没有不必要的脱衣方式?我试过了
$objcopy--仅保留调试--删除节=.debug\u loc--删除节=.debug\u aranges--删除节=.debug\u frame我的elf文件
还有什么可以剥离的吗?您需要-g1。这将为回溯生成最小的调试信息。从手册中:
级别1生成的信息最少,足以在中进行回溯
您不打算调试的程序部分。这包括
函数和外部变量的说明,以及行号
表,但没有关于局部
标签: Gcc
segmentation-fault Gdb
g++sanitizer
这个问题是我上一个问题的续篇,当前状态是我已经获得了地址消毒剂的输出——由@Employed Russian建议——如下所示。这是我第一次使用地址消毒剂,请原谅我太天真了
==2596== ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff89d67fd0 at pc 0x401f21 bp 0x7fff89d67d00 sp 0x7fff89d67cf8
READ of size 4 at 0x7fff89d67fd
我知道我可以使用-g选项生成调试符号。但是,该符号嵌入到目标文件中。gcc能否在结果可执行文件/库之外生成调试符号?与windows VC++编译器的.pdb文件类似。您需要使用objcopy来:
我使用下面的bash脚本将调试信息分离到.debug目录中扩展名为.debug的文件中。这样,我可以在一个tar文件中对库和可执行文件进行tar,在另一个tar文件中对.debug目录进行tar。如果我以后想添加调试信息,我只需提取调试tar文件,瞧,我有符号调试信息
这是bash脚本:
#!/bin
及
它们之间的区别是什么?pragma pack(字节对齐)影响由字节对齐输入指定的结构的每个成员,或影响其自然对齐边界,以较小者为准
\uuuu属性(对齐(字节对齐))影响变量的最小对齐方式(或结构字段,如果在结构中指定)
我认为以下是等效的
struct A {
//...
};
A a __attritube__((aligned(L1_CACHE_LINE)))
其中是一个属性((对齐(一级缓存线))将确保u int32\t A内部结构A将与2字节对齐,但不会以相同方式对齐其他变
我正在库代码中使用头,并试图将程序链接到libatomic.so
每当我尝试链接所有对象文件并创建我的库的SO文件时,我都会遇到错误
can not find /usr/lib64/libatomic.so.1.0.0
我在路径/usr/lib/gcc/x86_64-redhat-linux/4.8.5下有这个so文件。
正如我所说的那样。名称中未指定任何版本
我试图在创建共享库的gcc命令上使用-L选项指定路径/usr/lib/gcc/x86_64-redhat-linux/4.8.5,但它
是否可以在没有外部计算的情况下,直接在程序文本中确定堆栈上的非递归函数的需求?我需要它为非常小的微控制器(如AVR)中的线程分配内存资源。在调用函数之前,我需要知道这一点。指令——不幸的是,堆栈使用非常缺乏信息。或者我不明白什么?获取已传递参数的地址会将其放在堆栈上。因此,运行以下命令:
#include <stdio.h>
void my_fun(int dummy);
int get_stack_space(int dummy);
int main(void)
{
i
简化的代码段是:
class A {
public:
~A();
static A create();
private:
A() = default;
A(A&&) = default;
NonCopyable n;
};
A A::create() {
A a;
return a;
}
int main(int argc, char* argv[]) {
auto a = A::create();
retur
标签: Gcc
cross-compilingavr
我试图在linux上为avr编译当前的gcc版本10.1.0,但失败了
'/home/krud/git_my_checkout/first/own_components/gcc_install/gcc/gcc-10.1.0/build/gcc'
g++ -c -g -O2 -DIN_GCC -DCROSS_DIRECTORY_STRUCTURE -fno-exceptions
-fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-na
标签: Gcc
posixfreebsdglibc
我试图使以下代码在Linux和基于FreeBSD的系统上都能工作,它是宏\uuuu GLIBC\uuu和\uu使用XOPEN2K8的有效用法吗
#include <stdio.h>
#include <langinfo.h>
#include <locale.h>
#include <xlocale.h>
int main(void) {
//#if defined(__GLIBC__) && defined (__USE_XOP
我正在使用GCC7.5,在中找不到关于标志-z,noexecstack的信息
在哪里可以找到有关其行为的信息?例如,默认情况下是否启用它,如何检查它是否应用于我的文件等
我发现,自2019年11月7.5版发布以来,上面写着“标记由最新的GCC版本自动完成”。我假设这适用于GCC 7.5。来源:
-z关键字
-z与关键字一起直接传递给链接器。有关允许的值及其含义,请参阅链接器文档中的部分
发件人:
-z keyword
The recognized keywords are:
[.
我正在尝试使用CMake为Windows 10编译ASIMP 5.0.1。我通过MinGW使用的C/C++编译器是GCC和G++。如果我正确理解了这个问题,那么MakeFile的空白部分就有问题。/CMakeTmp/目录是空的,我确信答案就在我面前的某个地方:
控制台输出:
-- The C compiler identification is GNU 9.2.0
-- The CXX compiler identification is GNU 9.2.0
-- Detecting C com
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 163 页