我只是不明白为什么在编译一个C文件时,我会时不时地收到这个错误信息
C:\Users\Owner\Desktop\Tubes TBO>g++ -o main T-08-13509098-mmesinkata1.c T-08-13509098-mesinkata1.c mesinkar1.c: multiple definisi dari `♦'
C:\Users\Owner\AppData\Local\Temp\cc21kt92.o:T-08-13509098-mmesinkata1.c:(.bss+0x0): pertama didefinisikan disini: mult
我有下一个问题,我在笔记本上做了一个C的作业,我在那里有一个Linux系统,我的作业编译得很好,工作也很完美,但是当我尝试执行make命令在我的Pc (使用WSL的Windows10)中执行它时,我会得到这个错误。
make
gcc -o output main.o Unario.o Frec.o Inc.o ui.o utilities.o
/usr/bin/ld: Unario.o:(.bss+0x0): multiple definition of `c'; main.o:(.bss+0x0): first defined here
/usr/bin/ld: Unario.o:(
//Global space
int A;
int B = 0;
int C = 0x01;
static int D;
static int E = 0;
static int F = 0x01;
void foo()
{
static int G;
static int H = 0;
static int I = 0x01;
}
我的理解是,所有未显式初始化或初始化为0的全局和静态变量都将进入BSS部分。使用除0以外的任何值初始化的所有全局和静态变量都将进入数据部分。我说的对吗?
在这种情况下,下面将是正确的。
A -- BSS (No Explicit init
我从size命令中得到了意想不到的输出。
Afaik初始化存储在data段中的全局变量和静态变量,未初始化和初始化为存储在bss段中的全局/静态变量。
printf("%d",sizeof(int));给出int大小为4。然而,bss和data段并没有相应地增加到4。
#include <stdio.h>
int main()
{
return 0;
}
C:\Program Files (x86)\Dev-Cpp\MinGW64\bin>size memory-layout.exe
text data bss dec
我有以下声明
FILE *fptr; FILE *optr;
在algo.h中,main在main.c中打开这些文件。如果我把声明放在头文件中,我会得到上面的错误。如果我把它放在main.c中,那么我会得到多个定义错误,比如
src\main.o:main.c:(.bss+0xc88): multiple definition of rcount' src\new_algo.o:new_algo.c:(.bss+0xc88): first defined here src\main.o:main.c:(.bss+0xc8c): multiple definition ofcondi
考虑下面的守则:
#include<stdio.h>
int main()
{
static int arr[20] = {0};
return 0;
}
我在32位linux机器上用gcc编写了上面的程序.然后在可执行文件上运行size命令。我得到的结果如下:
text data bss dec hex filename
1033 276 112 1421 58d ./a.out
程序中没有任何变量的结果是:
text data bss dec hex f
在分析作为ARM平台的ELF文件编译的C++程序的C++部分时,我遇到了几种确定大小的方法。问题中也提到了我测试的四种方法。
然而,结果却大相径庭:
bss size according to nm: 35380
bss size according to readelf: 37632
bss size according to size: 37888
bss size according to objdump: 37594
这可能是什么原因?
用于生成输出的Python脚本
#!/usr/bin/env python
import re
import subproce
我希望avr-objdump显示来自avr-elf二进制文件的反汇编代码,还包括符号,但仅包括.bss部分的符号,如下所示:
SYMBOL TABLE:
00800100 l d .bss 00000000 .bss
00800102 u O .bss 00000001 cqueue<drv::uart0>::ptr
00800101 u O .bss 00000001 cqueue<drv::uart1>::ptr
...
00000000 <__vectors>:
0: 78 c0
我正在努力学习C程序可执行文件的结构。我的环境是GCC和64位英特尔处理器。
考虑下面的C代码a.cc。
#include <cstdlib>
#include <cstdio>
int x;
int main(){
printf("%d\n", sizeof(x));
return 10;
}
size -o a显示
text data bss dec hex filename
1134 552 8 1694 69e a
在我添加了另一个初始化的全局变量y之后。
i
.data和.bss的对齐有时是4字节,有时是32字节。示例1:根据以下输出中的最后一列,bss和数据的对齐方式为32字节
bash-3.00$ readelf --sections libmodel.so
There are 39 section headers, starting at offset 0x1908a63c:
Section Headers:
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
...
[25] .data PROGBIT
我编写了以下简单的C程序(test.c):
#include<stdio.h>
int main()
{
return 0;
}
并执行折叠以了解.bss段的大小变化。
gcc test.c -o test
size test
输出结果如下:-
text data bss dec hex filename
1115 552 8 1675 68b test
我没有宣布任何全球性的或静态的范围。因此,请解释为什么bss段大小为8字节。
我作了以下更改:-
#include<stdio.h>
i
静态内存布局的BSS部分是 应该是 表示“未初始化的全局变量”或“设置为0的全局变量”。 我正在运行一些测试,突然注意到局部静态变量也在增加BSS段的大小。 示例:- 在任何静态变量之前 int main (int argc, char argv[])
{
return 0;
} data/repos/e-c
❯ size a.out
text data bss dec hex filename
1418 544 8 1970 7b2 a.out 在静态变量之后 int main (int argc, c