更新:这个问题已经解决了。滚动到此答案的底部以获取解决方案。
是的,我想我找到了它……巧合。
我还不确定根本原因是什么,但我知道是哪种症状导致了启动问题。
基本上我认为这与我的构建过程和 Delta-pack 以及以下 jar 文件/文件夹的竞争条件有关:
文件夹:org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520
对比
Jar:org.eclipse.equinox.launcher.gtk.linux.x86_64_1.0.200.v20090519.jar
我偶然发现的地方是我在构建过程中看到的一些消息,但从未真正考虑过:
例如。
[java] [eclipse.generateFeature]
捆
org.eclipse.equinox.launcher.gtk.linux.x86:
[java] [eclipse.generateFeature] 选择了另一个单例版本:
org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520
这听起来像是处理过的构建选择了别的东西...?!?这对我来说似乎很奇怪。
如果它工作这个 jar 文件被提取(所以它是一个名为 org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200 的文件夹.v20090520),并且此文件夹包含一个名为 eclipse_1206.so 的文件。
在它不工作的情况下,还有一个名为org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520的文件夹但是文件 eclipse_1206.so 在这个文件夹中是 NOT 的。
我还在我的本地 Ubuntu 机器上验证了这一点,这在 不工作的情况下给了我比 Debian 机器更多的输出。
当它不在 Ubuntu 下工作时,我得到了这样的结果:
$ ./eclipse
(.:26981): GLib-GObject-WARNING **:
无效(NULL)指针实例
(.:26981): GLib-GObject-CRITICAL **:
g_signal_connect_data:断言
`G_TYPE_CHECK_INSTANCE(实例)'
失败
(.:26981): Gtk-CRITICAL **:
gtk_settings_get_for_screen:断言
`GDK_IS_SCREEN (screen)' 失败
(.:26981): GLib-GObject-CRITICAL **:
g_object_get:断言`G_IS_OBJECT
(对象)'失败
(.:26981): GLib-GObject-WARNING **:
类型为“gboolean”的gboolean' is
invalid or out of range for property
visible' 类型的值“TRUE”
(.:26981): Gtk-CRITICAL **:
gtk_settings_get_for_screen:断言
`GDK_IS_SCREEN (screen)' 失败
(.:26981): GLib-GObject-CRITICAL **:
g_object_get:断言`G_IS_OBJECT
(对象)'失败
(.:26981): Gtk-WARNING **: 屏幕
GtkWindow 未设置;你必须始终设置
使用前的 GtkWindow 屏幕
窗户
(.:26981): Gdk-CRITICAL **:
gdk_pango_context_get_for_screen:
断言`GDK_IS_SCREEN(屏幕)'
失败
(.:26981): Pango-CRITICAL **:
pango_context_set_font_description:
断言 `context != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_context_set_base_dir:断言
`context != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_context_set_language:断言
`context != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_layout_new:断言`上下文
!= NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_layout_set_text:断言
`layout != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_layout_set_attributes:断言
`layout != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_layout_set_alignment:断言
`layout != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_layout_set_ellipsize:断言
`PANGO_IS_LAYOUT(布局)'失败
(.:26981): Pango-CRITICAL **:
pango_layout_set_single_paragraph_mode:
断言“PANGO_IS_LAYOUT(布局)”
失败
(.:26981): Pango-CRITICAL **:
pango_layout_set_width:断言
`layout != NULL' 失败
(.:26981): Pango-CRITICAL **:
pango_layout_get_extents:断言
`layout != NULL' 失败
(.:26981): Gtk-CRITICAL **:
gtk_icon_theme_get_for_screen:
断言`GDK_IS_SCREEN(屏幕)'
失败
(.:26981): Gtk-CRITICAL **:
gtk_settings_get_for_screen:断言
`GDK_IS_SCREEN (screen)' 失败
(.:26981): Gtk-CRITICAL **:
gtk_icon_size_lookup_for_settings:
断言“GTK_IS_SETTINGS(设置)”
失败
(.:26981): Gtk-警告 **: 无效
图标大小 6
(.:26981): Gtk-CRITICAL **:
gtk_icon_theme_load_icon:断言
`GTK_IS_ICON_THEME (icon_theme)'
失败的分段错误
在托管的 Debian 机器 (vserver.de) 上,我得到了 NO 输出,如上面我的开场问题所述。
可能在构建过程中有时使用前者,有时使用后者。我目前无法解释原因。我还注意到该文件夹用于普通的 _x86(32 位)架构,而 jar 用于 x86_64(64 位)架构。不知道为什么选择 64,因为我没有在 build.properties 中指定 x86_64。
另外我不明白的是,生成的名为 org.eclipse.equinox.launcher.gtk.linux.x86_1.0.200.v20090520 的文件夹包含文件 eclipse_1206.so,即使这个文件只存在于 org.eclipse.equinox.launcher.gtk.linux.x86_64_1.0.200.v20090519.jar 中(注意 ...x86_64 ...)
结论
我认为根本原因是,我有某种不一致/损坏/混乱的目标平台或增量包。也许我在构建无头 PDE 的方式上也做错了什么,但到目前为止我还不能说,因为它似乎工作......有时......有时不是:)
我通过将一致的文件夹与包含 eclipse_1206.so 文件的文件夹交换来验证我的上述陈述,然后它突然起作用了。可重现。
所以,如果你在 Linux 下也有类似的启动问题,不妨检查一下 equinox 启动器文件夹/jar 中是否存在 eclipse_1206.so(例如 org.eclipse.equinox.launcher.gtk.linux.x86_1 .0.200.v20090520)
与此同时,我将调查根本原因是什么以及如何正确设置构建并将其写在博客文章中。
感谢到目前为止所有试图提供帮助的人。
克里斯托夫
更新解决方案:
解决方案是为 3.5 版本下载一个新的 Eclipse Deltapack,并将我的目标平台中的所有 ..launcher.. 插件替换为新的。问题是一个损坏的启动器插件,其中缺少 eclipse_1206.so 文件。
2010/03/01 更新:在另一个说明中,我发现 SVN 默认忽略文件扩展名 .so 这也是我的问题的根源。
我上面描述的我的解决方案到目前为止只在本地工作,这是正确的。
但是今天我想检查从我的构建服务器出来的构建是否最终也是正确的并且令人惊讶......它们仍然被破坏了。我立即检查了启动器插件文件夹,发现..eclipse_1206.so 再次丢失。然后我检查了 SVN 存储库,确实该文件不存在。事实证明,SVN 默认会忽略我现在在这里描述的那些文件:SVN ingnores .so files by default