could it be that objects compiled by different compilers are not compatible between each other? |
Yes, that is the case. When it comes to exported C++ functions, even different versions of the same compiler (e.g. VC++) can produce incompatible binaries.
OpenImage looks like it was built using some version of VC++, going by the name mangling (or decoration) -- the ?, *, @@AAEXXZ stuff
?clear_value@ParamValue@v1_0@OpenImageIO@@AAEXXZ |
But the name the GCC linker is looking for is different (not so sure about how to decode the GCC output), so the it fails to find the required functions.
Even if the name mangling wasn't different, you could hit problem with the C runtime library. When passing std::string values (and std::vector, etc or any custom class that allocates memory) between modules, these modules must be using the same memory allocator. This means they must be linked to the same version of the C runtime library.
So you need to get hold of a build of OpenImage which has been built with your version of GCC, or build one yourself.
Andy
PS You can get away with C functions if you are careful how you export names, handle memory allocation, etc. -- but not C++.