Eclipse RCP产品导出后启动报错:无法定位伴随共享库
问题:导出Eclipse RCP产品启动报错:无法定位共享库
我有一个用Eclipse 3.7创建的Eclipse RCP应用,现在用最新版Eclipse开发,未转为E4,修改部分代码后可在Run或Debug菜单正常运行。当前使用Java 17,导出产品过程无异常,但双击启动时出现错误:Eclipse executable launcher error: Exported Product is Unable to locate companion shared library
以下是Agrotracker.product文件内容:
<?xml version="1.0" encoding="UTF-8"?> <?pde version="3.5"?> <product name="AgroTracker" id="AgroTracker.product" application="AgroTracker.application" version="1.1.148.qualifier" type="features" includeLaunchers="true" autoIncludeRequirements="true"> <aboutInfo> <image path="/AgroTracker/icons/cse_230x83.gif"/> <text> %aboutText </text> </aboutInfo> <configIni use="default"> </configIni> <launcherArgs> <programArgsWin>-console </programArgsWin> </launcherArgs> <windowImages/> <splash startupProgressRect="5,5,400,20" startupMessageRect="7,25,400,20" startupForegroundColor="008040" /> <launcher name="AgroTracker.exe"> <win useIco="true"> <ico path="/AgroTracker/icons/LogoKlein.ico"/> <bmp/> </win> </launcher> <vm> <linux include="true">jre1.5.0_06</linux> <windows include="true">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17</windows> </vm> <plugins> <plugin id="AgroTracker"/> <plugin id="ar.com.cse.cseagro.libraries"/> <plugin id="com.ibm.icu"/> <plugin id="javax.servlet"/> <plugin id="javax.xml"/> <plugin id="javax.xml.stream"/> <plugin id="org.eclipse.ant.core"/> <plugin id="org.eclipse.compare.core"/> <plugin id="org.eclipse.core.commands"/> <plugin id="org.eclipse.core.contenttype"/> <plugin id="org.eclipse.core.databinding"/> <plugin id="org.eclipse.core.databinding.beans"/> <plugin id="org.eclipse.core.databinding.observable"/> <plugin id="org.eclipse.core.databinding.property"/> <plugin id="org.eclipse.core.expressions"/> <plugin id="org.eclipse.core.filebuffers"/> <plugin id="org.eclipse.core.filesystem"/> <plugin id="org.eclipse.core.filesystem.win32.x86"/> <plugin id="org.eclipse.core.jobs"/> <plugin id="org.eclipse.core.net"/> <plugin id="org.eclipse.core.net.win32.x86"/> <plugin id="org.eclipse.core.resources"/> <plugin id="org.eclipse.core.resources.win32.x86"/> <plugin id="org.eclipse.core.runtime"/> <plugin id="org.eclipse.core.runtime.compatibility.auth"/> <plugin id="org.eclipse.core.runtime.compatibility.registry"/> <plugin id="org.eclipse.core.variables"/> <plugin id="org.eclipse.equinox.app"/> <plugin id="org.eclipse.equinox.common"/> <plugin id="org.eclipse.equinox.preferences"/> <plugin id="org.eclipse.equinox.registry"/> <plugin id="org.eclipse.equinox.security"/> <plugin id="org.eclipse.equinox.security.ui"/> <plugin id="org.eclipse.equinox.security.win32.x86"/> <plugin id="org.eclipse.equinox.simpleconfigurator"/> <plugin id="org.eclipse.equinox.util"/> <plugin id="org.eclipse.help"/> <plugin id="org.eclipse.jface"/> <plugin id="org.eclipse.jface.databinding"/> <plugin id="org.eclipse.jface.text"/> <plugin id="org.eclipse.osgi"/> <plugin id="org.eclipse.osgi.services"/> <plugin id="org.eclipse.rcp"/> <plugin id="org.eclipse.swt"/> <plugin id="org.eclipse.swt.carbon.macosx"/> <plugin id="org.eclipse.swt.win32.win32.x86"/> <plugin id="org.eclipse.text"/> <plugin id="org.eclipse.ui"/> <plugin id="org.eclipse.ui.carbon"/> <plugin id="org.eclipse.ui.forms"/> <plugin id="org.eclipse.ui.net"/> <plugin id="org.eclipse.ui.views"/> <plugin id="org.eclipse.ui.workbench"/> <plugin id="org.eclipse.ui.workbench.texteditor"/> <plugin id="org.eclipse.update.configurator"/> <plugin id="org.eclipse.update.core"/> <plugin id="org.eclipse.update.core.win32"/> <plugin id="org.eclipse.update.scheduler"/> <plugin id="org.eclipse.update.ui"/> <plugin id="org.sat4j.core"/> <plugin id="org.sat4j.pb"/> </plugins> <features> <feature id="org.eclipse.rcp"/> <feature id="org.eclipse.equinox.p2.rcp.feature"/> <feature id="AgroTracker.Feature"/> </features> <configurations> <plugin id="org.apache.felix.scr" autoStart="true" startLevel="2" /> <plugin id="org.eclipse.core.runtime" autoStart="true" startLevel="4" /> <plugin id="org.eclipse.equinox.common" autoStart="true" startLevel="2" /> <plugin id="org.eclipse.equinox.ds" autoStart="true" startLevel="2" /> <plugin id="org.eclipse.equinox.event" autoStart="true" startLevel="2" /> <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" /> <plugin id="org.eclipse.update.configurator" autoStart="true" startLevel="4" /> <property name="org.eclipse.update.reconcile" value="false" /> </configurations> <repositories> <repository location="http://localhost/agrotracker-updates" name="" enabled="true" /> </repositories> <preferencesInfo> <targetfile overwrite="false"/> </preferencesInfo> <cssInfo> </cssInfo> </product>
解决建议
- 匹配系统架构:当前product引用了大量32位(
x86)插件,而Java 17是64位版本,架构不匹配会导致启动库缺失。打开product编辑器的「Launching」标签页,将架构设置为win32.x86_64,并把所有x86后缀的插件替换为x86_64版本(例如org.eclipse.core.filesystem.win32.x86_64)。 - 统一VM配置:product中Linux的VM配置还是
jre1.5.0_06,和Java 17完全不兼容,建议删除该配置或统一改为JavaSE-17。同时确认导出时是否正确嵌入了Java 17运行时,或在启动参数中指定正确的64位JRE路径。 - 清理旧兼容插件:移除
org.eclipse.core.runtime.compatibility.registry、org.eclipse.update.*这类Eclipse 3.x的旧兼容插件,最新版Eclipse RCP已不再依赖这些,残留会导致环境冲突。 - 检查导出完整性:导出产品时勾选「Generate metadata for all plugins and fragments」选项,导出后检查目录下是否存在启动器对应的dll文件(如
Agrotracker_xxxx.dll),若缺失可从当前Eclipse安装目录复制对应64位launcher文件替换。 - 确认特性依赖:虽然product是特性类型,但要确保
org.eclipse.rcp等特性是对应64位版本,且包含所有必要的RCP运行依赖。
内容的提问来源于stack exchange,提问作者Nicolas400
相关产品推荐
相关产品推荐

