On Sun, 11 Feb 2007, Alex Sirota wrote: Hello Alex,
Thanks for responding! BTW: The webpage for ColorZilla appears to have disappeared and been replaced with your homepage (uploaded to the wrong directory maybe?): http://www.iosart.com/firefox/colorzilla/ > I'm still investigating why exactly this happens - if anyone can shed some > more light on this There's a couple of pointers in the previous email and a couple more references on the following page (search for "C++", ColorZilla gets a mention specifically as example of an extension contain binary components): http://web.glandium.org/blog/?p=97 Googling for some combinations of the following keywords: Mozilla extensions C++ ABI GCC-3 GCC-4 XPCOM also brings up the right sort results. It's to do with a change in the format of compiled C++ binaries (the "ABI") between the old version of GCC that Mozilla still use and the new version of GCC that more up-to-date distributions are using. As a new version of each Linux distribution comes out, you'll gradually see the "problem" extend to more and more distributions. > > would it be possible to move the GetPixel() function to plain C > I believe that the problem goes beyond a simple recompile on Ubuntu. The recompile with GCC-4 should solve the immediate problem on Ubuntu/ Fedora. However then there would be two libraries---one for older GCC-3 installs (also the offical builds) and one for newer GCC-4 based distros. At this point it would either be necessary to supply two downloads, or to have the JavaScript in the package detect which library to load (much the same as the current 'mac'/'intelmac' choice of library). One possibility might be to attempt to load the library and if fails, attempt to load the other GCC-4 one using a try/except clause. > The binary component is a C++ XPCOM classs that Mozilla communicates with. > This means that it cannot be implemented in plain C Ultimately, everything that can be done in C++ can be done in C (originally C++ was just a pre-processor that converted C++ into C source); in this case it should be made even easier because of the XPCOM abstraction layer. There's some documentation on the Mozilla site about having Mozilla automatically select between directories of libraries depending on the platform in use: http://developer.mozilla.org/en/docs/Bundles#Platform-specific_Subdirectories which might remove the current Javascript auto-detection code from the extension; unfortunately platform string "Linux_x86-gcc3" is used for both GCC3 *and* GCC4 compiled versions... wah. It should be possible create the IDL description of the interface (a single class, containing a single function) and then create a plain C file that provides that function. Is the reverse-engineered contents in my previous email correct---is there anything I missed that the platform-specific library also needs to do? Do you have the source-code to hand, that might making testing out alternatives a little easier. -Paul -- Why do one side of a triangle when you can do all three. Southampton, GB -- [email protected] https://lists.ubuntu.com/mailman/listinfo/ubuntu-uk https://wiki.kubuntu.org/UKTeam/
