2009-12-07 102 views
5

我有一个gcc编译的应用程序链接到动态库。有没有办法强制加载库的顺序? (在我的情况下,一个库构造函数使用由其他库构造函数设置的资源)。施加图书馆加载订单

谢谢。

回答

5

gcc不负责加载库,或者ld.so在您的程序加载时自动执行,或者您按照@jldupont的建议手动执行。

ld.so可能故意randomise为了防止返回stdlib攻击。

因此,要么:

  1. 装入库自己。
  2. 或者删除库加载脚本之间的依赖关系。
  3. 使库本身包含依赖关系(可能工作,可能不会) 这就是当你到达链接每个共享库的点时,确保它包含链接命令中的-l<dependentlib>。您可以通过创建一个只与该共享库链接的trival程序来进行测试 - 如果构建并运行,则库包含所有必需的相关库。这可能会有所帮助,如果ld.so加载库的依赖顺序 - 我认为它必须做。
+0

如何“让库本身包含依赖项”? – jackhab 2009-12-07 13:19:22

+0

@Jack - 编辑我的答案 - 基本上链接库时,确保所有相关的库链接。 – 2009-12-07 13:42:32

3

您可以使用dlopen并自行加载库:这样,您可以对加载/卸载过程进行更精细的纹理控制。见here

当然,这不是一个基于“gcc”的解决方案,它需要重新处理你的应用程序......也许你可以在更多细节中解释你所面临的“问题”?

如果它不符合您的需求,您可以忽略我的解决方案。干杯!