This question already has answers here:
Embedding resources in executable using GCC

(4个答案)


7年前关闭。




通过Windows API(请参阅http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx)将二进制资源嵌入PE镜像(EXE,DLL)是很容易的。

Linux中是否有任何类似的标准API?

还是某种事实上的方法来嵌入资源?

目标是将一些静态二进制和/或文本数据嵌入可执行文件中,例如图片,HTML等。这样程序二进制分发就像制作一个文件一样简单? (假设所有库依赖性都可以)

更新:

按照bdk的建议,我尝试了Embedding binary blobs using gcc mingw中描述的解决方案,它对我有用。但是,有一些问题值得一提:我的项目(在Code::Blocks中)由许多C++文件组成,并将二进制数据添加到任何对应的目标文件中使它们无用,这破坏了构建-objdump -x将显示大多数嵌入后符号消失了(我没有找到解决方法)。为了解决这个问题,我向项目中添加了一个空的虚拟.cpp文件,其唯一目的是提供一个可播放的目标文件,并为此文件编写了以下自定义生成步骤,从而很好地完成了此工作(示例使用Code::Blocks宏) ):
$compiler $options $includes -c $file -o $object
ld -Ur -b binary -o $object <binary payload path>

最佳答案

使自己成为汇编器文件blob.S:

    .global blob
    .global blob_size
    .section .rodata
blob:
    .incbin "blob.bin"
1:
blob_size:
    .int 1b - blob

用gcc -c blob.S -o blob.o编译
现在可以使用以下命令从C程序中访问Blob:
extern uint8_t blob[];
extern int blob_size;

使用bin2c转换器通常可以很好地工作,但是如果blob很大,则incbin解决方案会更快,并且占用的内存更少(编译时间)

关于c++ - 有没有将资源嵌入Linux可执行镜像的标准方法? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5479691/

10-17 00:25