编译生成elf文件
㈠ 为什么编译器版本出现在我的ELF可执行文件中
我只知道这些啦,到电子词典的官方网站上应该有的!
我买了名人6188电子词典,我看电子词典里的程序都是*.elf的格式,这是用什么编程软件编的阿,在哪里能找到?
ELF(Executable and Linking Format)是可执行连接格式
可执行连接格式是UNIX系统实验室(USL)作为应用程序二进制接口
(Application Binary Interface(ABI)而开发和发布的。工具接口标准委
员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操
作系统之间可移植的二进制文件格式。
用linux的gcc编译器就可以生成elf文件
㈡ eclipse编译完了只输出elf文件没有hex文件
你先得在工程属性里配置输出hex文件,才能在Debug/Release文件夹下找到对应工程名的hex文件
右击工程名,属性->C/C++ Build->IAR Linker for ARM->Output Converter->勾选Generate additional output,并在output format下拉框里选择Intel extended
㈢ 用Keil编译程序时数据段过长怎么办
程序DATA区空间已超过指定单片机的DATA区空间,可以用keil C编译的时候压缩。
㈣ elf是什么格式,怎么运行
Executable Linkable Format
就是可执行文件。
gcc 编出来的。
http://crquan.blogbus.com/logs/1651240.html
㈤ 如何把shell脚本编程elf文件
Linux ELF ELF = Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。扩展名为elf。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。假定开发者定义了一个二进制接口集合,ELF标准用它来支持流线型的软件发展。应该减少不同执行接口的数量。因此可以减少重新编程重新编译的代码。编辑本段文件格式
㈥ 求从交叉编译器生成的elf文件中读取全局变量信息的函数
楼主,这个恐怕不是一个函数能解决的,ELF文件格式还是有点复杂的。 我以前做过类似的功能,从ELF文件中加载所有符号表信息,字符串信息,并下载代码。 我推荐你用一个开源的库:ELFIO。 我想这个库应该可以实现你的功能,只是你要去研究一下它的用法。 当然,你得首先对ELF文件格式有所了解。ELFIO库下载地址: http://sourceforge.net/projects/elfio/ ================================这是我以前写过的加载ELF中所有Section信息的例子: BOOL LoadELF(char* pFilename)
{
CString strName,tmp;
IELFI* pReader;
if ( ERR_ELFIO_NO_ERROR != ELFIO::GetInstance()->CreateELFI( &pReader ) ) {
Msg( "Can't create ELF reader.\r\n",2,0);
return FALSE;
}
if ( ERR_ELFIO_NO_ERROR != pReader->Load(pFilename ) ) {
Msg( "Can't open input elf file.\r\n",2,0);
return FALSE;
} int nSecNo = pReader->GetSectionsNum();
for (int i = 0; i < nSecNo; i++ )
{ // For all sections
const IELFISection* pSec = pReader->GetSection( i );
printf("%s\n",pSec->GetName().c_str());
Elf32_Half index= pSec->GetIndex() ;
std::string name = pSec->GetName() ;
Elf32_Word type =pSec->GetType() ;
Elf32_Addr addr = pSec->GetAddress() ;
Elf32_Word size = pSec->GetSize() ;
Elf32_Word link = pSec->GetLink() ;
Elf32_Word info = pSec->GetInfo() ;
Elf32_Word aa = pSec->GetAddrAlign() ;
Elf32_Word esize = pSec->GetEntrySize() ;
const char* p = pSec->GetData() ;
Elf32_Word flag = pSec->GetFlags() ;
strName = pSec->GetName().c_str();strName.MakeUpper();
//如果未指定section,读取所有SHF_EXECINSTR属性的Section
if(g_MapScetion.GetCount()==0)
{
if(flag&SHF_EXECINSTR)
LoadElfSection((BYTE*)pSec->GetData(),pSec->GetAddress(),pSec->GetSize(),pList,pAddInfo);
}
else
{
if(g_MapScetion.Lookup(strName,tmp))
LoadElfSection((BYTE*)pSec->GetData(),pSec->GetAddress(),pSec->GetSize(),pList,pAddInfo);
}
pSec->Release();
} pReader->Release();
return TRUE;
}
㈦ 用Keil编译程序时出现 error C249: 'DATA': SEGMENT TOO LARGE,数据段过长,怎么解决硬件已焊好!
解决方法如下:(设置Target的属性参数,具体设置如下)
㈧ ELF文件 编译时间
具体如下:
ELF文件格式提供了两种不同的视角,在汇编器和链接器看来,ELF文件是由Section Header Table描述的一系列Section的集合,而执行一个ELF文件时,在加载器(Loader)看来它是由Program Header Table描述的一系列Segment的集合。
目标文件再不同的系统或平台上具有不同的命名格式,在Unix和X86-64 Linux上称为ELF(Executable and Linkable Format, ELF)。
㈨ C语言编译到机器码的过程求详细解说,不胜感激
从编码到生成可执行的binary文件是有好几个过程的:(默认已完成编码)
1, 预编译(预处理), 也就是替换工作, 先把代码中的宏做替换, 条件编译等会做处理,为编译做作准备;
2,编译,包括了语法的检查,汇编代码等中间代码的生成,代码优化,obj文件(也算是目标代码)的生成,已经是有机器码了;
3.库的合成,这个不一定有,不是必须的;
4.链接, 连接器会按照一定的规则,比如根据连接脚步,把code组织起来,生成elf文件(elf可能不是一个所有通用的格式),这个时候已经可以执行了,里面的可以执行的机器码;
5,裁剪, 可以把elf文件中的非必需的段 strip,生成一个更精简的elf文件;
6,binary的生成,obj命令可以把elf文件转换成binary文件,binary文件烧录到存储器中可以直击运行。