【发布时间】:2009-12-07 11:28:34
【问题描述】:
我有一个 gcc 编译的应用程序链接到动态库。有没有办法强制加载库的顺序? (在我的情况下,一个库构造函数使用由其他库构造函数设置的资源)。
谢谢。
【问题讨论】:
标签: gcc shared-libraries
我有一个 gcc 编译的应用程序链接到动态库。有没有办法强制加载库的顺序? (在我的情况下,一个库构造函数使用由其他库构造函数设置的资源)。
谢谢。
【问题讨论】:
标签: gcc shared-libraries
gcc 不负责加载库,ld.so 会在您的程序加载时自动加载,或者您按照 @jldupont 的建议手动加载。
而ld.so 可能会故意使用randomise 来防止return-to-stdlib 攻击。
所以要么:
-l<dependentlib>。您可以通过创建一个仅与该共享库链接的简单程序来测试这一点 - 如果它构建并运行,则该库包含所有必要的依赖库。如果 ld.so 按依赖顺序加载库,这可能会有所帮助 - 我认为它必须这样做。【讨论】:
您可以使用dlopen 并自己加载库:这样,您可以对加载/卸载过程进行更精细的控制。见here。
当然,这不是基于“gcc”的解决方案,它需要重新设计您的应用程序......也许您可以更详细地解释您面临的“问题”?
如果我的解决方案不符合您的需求,您可以忽略它。干杯!
【讨论】: