davidben / nspluginwrapper

A cross-platform NPAPI plugin viewer
http://nspluginwrapper.org
GNU General Public License v2.0
23 stars 10 forks source link

C++ library dependencies not provided #45

Open danmenes opened 12 years ago

danmenes commented 12 years ago

On linux, When attempting to wrap Oracle's 32-bit java plugin JRE version 1.6.0.24 (aka libnpjp2.so), nspluginwrapper reports a missing dependency (__gxx_personality_vo). The problem arises because the plugin expects the standard C++ runtime library to be loaded (stdlibc++.so). This problem could arise with other plugins as well.

It is worth noting that this patch will permit users to run the popular WebEx meeting client on 64-bit browsers. This client requires native 32-bit libraries on linux, and therefore will not run on a 64-bit JVM.

With the following patch, nspluginwrapper will create a wrapper for 32 bit Java without complaint. The JRE appears to execute correctly. My only discomfort with it is that I have hard-coded version 6 of the standard C++ library. It may be more appropriate to allow the most recent version to be selected.

--- npw-viewer.c    2011-06-30 23:18:57.000000000 -0400
+++ nspluginwrapper-1.4.4/src/npw-viewer.c  2012-03-11 14:09:35.104158681 -0400
@@ -5128,6 +5128,17 @@
    }
    handles[n_handles++] = handle;
    dlerror();
+#else
+   /* Install libstdc++ for java */
+   const char libstcpp[] = "libstdc++.so.6";
+   D(bug("  trying to open standard C++ runtime '%s'\n", libstcpp ));
+   if ((handle = dlopen(libstcpp, RTLD_LAZY|RTLD_GLOBAL)) == NULL) {
+     npw_printf("ERROR: %s\n", dlerror());
+     return 1;
+   }
+   handles[n_handles++] = handle;
+   dlerror();
+
 #endif
    D(bug("  %s\n", plugin_path));
    if ((handle = dlopen(plugin_path, RTLD_LAZY)) == NULL) {