通过Windows API(参见http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx),将二进制资源嵌入PE映像(EXE,DLL)非常容易。
那么在Linux中是否有类似的标准API呢?
或者也许有一些非正式的资源嵌入方法吗?
目标是将一些静态的二进制和/或文本数据嵌入可执行文件中,例如图片、HTML等,以便程序二进制分发简单,只需复制一个文件即可(假设所有库依赖都没问题)。
更新:
按照bdk的建议,我尝试了使用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>