2012-06-27 34 views
1

我們有一個java程序,它通過JNI依賴於C++代碼。我們將.so和.dll作爲solaris和C++代碼的窗口放置在java程序的classpath中。 同樣在Windows上,我們已經生成了java.exe.manifest以強制Windows使用MSVC RTL。這在solaris正常工作時,Windows 2003,但在2008年的窗戶,我得到錯誤信息 「並排組裝comnfiguration側是錯誤的」在windows 2008上從JNI加載dll時出錯

這裏是java.exe.manifest

<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='amd64' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 
</assembly> 

我也試過調試問題通過sxstrace,這裏是它的日誌

================= 
Begin Activation Context Generation. 
Input Parameter: 
    Flags = 0 
    ProcessorArchitecture = AMD64 
    CultureFallBacks = en-US;en 
    ManifestPath = D:\JDA\TRO\bin\OptCoreBodies.dll 
    AssemblyDirectory = D:\JDA\TRO\bin\ 
    Application Config File = 
----------------- 
INFO: Parsing Manifest File D:\JDA\TRO\bin\OptCoreBodies.dll. 
    INFO: Manifest Definition Identity is (null). 
    INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0" 
    INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053" 
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50608.0". 
    INFO: Resolving reference for ProcessorArchitecture amd64. 
     INFO: Resolving reference for culture Neutral. 
      INFO: Applying Binding Policy. 
       INFO: Find publisher policy at C:\Windows\WinSxS\manifests\amd64_policy.8.0.microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.3053_none_09c0f5a3facc9779.manifest 
       INFO: Publisher Policy redirected assembly version. 
       INFO: Post policy assembly identity is Microsoft.VC80.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.3053". 
      INFO: Begin assembly probing. 
       INFO: Attempt to probe manifest at C:\Windows\WinSxS\manifests\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.3053_none_88e044e32fae7230.manifest. 
       INFO: Manifest found at C:\Windows\WinSxS\manifests\amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.3053_none_88e044e32fae7230.manifest. 
      INFO: End assembly probing. 
INFO: Resolving reference Microsoft.VC80.CRT.mui,language="&#x2a;",processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.3053". 
    INFO: Resolving reference for ProcessorArchitecture amd64. 
     INFO: Resolving reference for culture en-US. 
      INFO: Applying Binding Policy. 
       INFO: No publisher policy found. 
       INFO: No binding policy redirect found. 
      INFO: Begin assembly probing. 
       INFO: Did not find the assembly in WinSxS. 
       INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_64\Microsoft.VC80.CRT.mui\8.0.50727.3053_en-US_1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.mui.DLL. 
       INFO: Did not find manifest for culture en-US. 
      INFO: End assembly probing. 
     INFO: Resolving reference for culture en. 
      INFO: Applying Binding Policy. 
       INFO: No publisher policy found. 
       INFO: No binding policy redirect found. 
      INFO: Begin assembly probing. 
       INFO: Did not find the assembly in WinSxS. 
       INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_64\Microsoft.VC80.CRT.mui\8.0.50727.3053_en_1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.mui.DLL. 
       INFO: Did not find manifest for culture en. 
      INFO: End assembly probing. 
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053". 
    INFO: Resolving reference for ProcessorArchitecture amd64. 
     INFO: Resolving reference for culture Neutral. 
      INFO: Applying Binding Policy. 
       INFO: No binding policy redirect found. 
      INFO: Begin assembly probing. 
       INFO: Did not find the assembly in WinSxS. 
       INFO: Attempt to probe manifest at C:\Windows\assembly\GAC_64\Microsoft.VC80.CRT\8.0.50727.4053__1fc8b3b9a1e18e3b\Microsoft.VC80.CRT.DLL. 
       INFO: Attempt to probe manifest at D:\JDA\TRO\bin\Microsoft.VC80.CRT.DLL. 
       INFO: Attempt to probe manifest at D:\JDA\TRO\bin\Microsoft.VC80.CRT.MANIFEST. 
       INFO: Attempt to probe manifest at D:\JDA\TRO\bin\Microsoft.VC80.CRT\Microsoft.VC80.CRT.DLL. 
       INFO: Attempt to probe manifest at D:\JDA\TRO\bin\Microsoft.VC80.CRT\Microsoft.VC80.CRT.MANIFEST. 
       INFO: Did not find manifest for culture Neutral. 
      INFO: End assembly probing. 
    ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="amd64",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.4053". 
ERROR: Activation Context generation failed. 
End Activation Context Generation. 

任何人可以幫助我解決這個問題。我嘗試安裝MS VS 2005 Redistributable但沒用。

在此先感謝 尼拉吉瑞斯

回答

1

您版本編譯的CRT版本=「8.0。 50727.762'以及你所在的系統執行沒有這個CRT版本。因此@panickal提到安裝MS VS 2005 Redistributable Package應該可以解決問題。

+0

我從2005年到2008年幾乎安裝了VC++的所有可重新分發程序。我檢查了C:\ Windows \ WinSXS這個目錄在Windows 2008機器上。 amd64_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4053_none_88e046c92fae6f57 – anonymous

+0

清單文件中的@niraj包含 processorArchitecture =「amd64」和version =「8.0.50727.4053」的標記 – Sandy

0
+0

我已經安裝了X64可再發行組件包,但還是同樣的錯誤。讓我嘗試安裝X86 Redistributable軟件包。 – anonymous

1

我終於解決了這個問題。我重新安裝了操作系統,然後安裝了SP1的Visual C++ 2005 Redistributable(x64)。然後安裝Java 64位。然後添加HKEY_LOCAL_MACHINE \ COMPONENTS \ PreferExternalManifest註冊表並將其設置爲1.

之後,問題得到解決。

感謝 尼拉吉瑞斯

相關問題