小编And*_*rey的帖子

是否有任何标准方法将资源嵌入Linux可执行映像?

通过Windows API将二进制资源嵌入到PE映像(EXE,DLL)中非常容易(参见http://msdn.microsoft.com/en-us/library/ms648008(v=VS.85).aspx).

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

或者某种事实上的资源嵌入方法?

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

更新:

根据bdk的建议,我尝试了使用gcc mingw嵌入二进制blob中描述的解决方案,它对有用.虽然,有一些值得一提的问题:我的项目(在Code :: Blocks中)由许多C++文件组成,并将二进制数据添加到任何相应的目标文件中,使得它们无法破坏构建 - objdump -x将显示大多数嵌入后符号已经消失(我没有找到如何解决它).为了解决这个问题,我在项目中添加了一个空的虚拟.cpp文件,其唯一目的是提供一个可以使用的目标文件,并为该文件编写了以下自定义构建步骤,该文件很好地完成了工作(示例使用Code :: Blocks宏) ):

$compiler $options $includes -c $file -o $object
ld -Ur -b binary -o $object <binary payload path>
Run Code Online (Sandbox Code Playgroud)

c++ linux embedded-resource

25
推荐指数
2
解决办法
1万
查看次数

是否有一个实用的理由使用"if(0 == p)"而不是"if(!p)"?

我倾向于使用逻辑否定运算符编写if语句:

if (!p)
    some_code();
Run Code Online (Sandbox Code Playgroud)

我周围的一些人倾向于使用显式比较,因此代码看起来像:

if (FOO == p)
    some_code();
Run Code Online (Sandbox Code Playgroud)

其中FOO是一个,FALSE,0,0.0,NULL,等

我更喜欢简短形式,因为它是:

  • operator!= 友好
  • generic programming 友好
  • 简洁(对我来说更美丽)

什么是务实的(如果有的话),否则写这个的好处是什么?

c++ coding-style

21
推荐指数
4
解决办法
3715
查看次数

在delphi DLL中使用delphi应用程序的内存管理器(无需重新编译应用程序)

我需要编写一个DLL(使用Delphi),它动态加载到delphi应用程序中并进行RTTI查询(典型的操作是获取控件属性的字符串值).经典的问题是在应用程序和DLL之间传递字符串(和对象)是有问题的,因为两者中使用了不同的内存管理器(这可能导致内存问题,例如DLL的内存管理器会尝试释放由Application的内存管理器分配的内存).

有没有办法以不依赖于delphi版本的方式将DLL的内存管理器设置为应用程序的内存管理器?有什么想法吗?

2010年10月编辑:

由于对这个主题的兴趣几乎消失了 - 我将描述我最终得到的(非常差的)解决方案,以便其他人理解为什么我不接受任何建议的答案.

因此,一个哈克的方式来执行这样的事情是要找到RVAMemoryManager结构(参见System.pas的实现部分)和DLL硬编码.这样,DLL就能够将其私有内存管理器设置为与其加载的应用程序相同.它适用于一些限制和问题; 无论如何 - 它非常依赖于Delphi编译器和链接器选项.

虽然这不是我正在寻找的答案 - 我没想到比这更好的东西.

delphi dll memory-leaks memory-management

0
推荐指数
1
解决办法
2031
查看次数