我使用最近的Glade开发了一个应用程序,所以我需要它在运行时使用GtkBuilder从XML加载UI。如果我尝试在具有太旧了一个GTK(如RHEL 5),它将无法像这样如何为不匹配的共享对象处理“未定义符号”错误
未定义的符号一个发行版上运行此:gtk_builder_new
这是正常的和预期。但是,我想知道是否有办法捕捉到这个错误,而是显示一个GUI错误对话框,例如“你的Gtk版本不够新”?这是我的main()开始之前发生的错误,所以问题是,有没有办法处理运行时链接错误?虽然使用谷歌搜索,我发现了一个链接器插件的概念,但我还没有找到有关的细节。这听起来像是我的应用程序之外必须存在的东西,所以也许这有点远。
我可以使用dlopen()加载Gtk,但这很荒谬,因为我必须给它的完整路径,然后我必须调用dlsym()很多来链接我需要的每个函数。 ld-linux.so搜索我。有没有一种方法可以使用ld-linux.so来告诉我libgtk的路径而不实际加载它,然后检查版本是否足够新(或只是否存在gtk_builder_new),然后在运行时链接完成,如果没有问题?
使用'dlopen'和'dlsym'检查此特定功能 – Erik 2011-03-30 08:22:20
感谢您提出的解决方案。最后我们停止了对RHEL 5的支持。我仍然认为一个非常理想的解决方案“捕捉链接错误并以任意,用户友好的方式显示它们”尚未实现,可能需要做一些关于如何完成运行时链接和启动流程的更根本性更改。 – ecloud 2011-08-23 17:32:27