[Pkg-octave-devel] CXX_ABI

John W. Eaton jwe at bevo.che.wisc.edu
Tue Jul 29 15:01:53 UTC 2008


In the octave3.0-headers package version 3.0.0-1, I see

  /* Define to the C++ ABI your compiler uses. */
  #define CXX_ABI gnu_v3

in /usr/include/octave/config.h, but in the octave3.0-headers package
version 1:3.0.0-9, I see

  /* Define to the C++ ABI your compiler uses. */
  #define CXX_ABI unknown

I think the "gnu_v3" value is the correct value; I'm not sure how it
happened that "unknown" was determined when 3.0.0-9 was built and I'm
not able to duplicate it on my system.

This macro is used by Octave to construct the symbol name used when
loading .oct files.

The problem is that given this difference, .oct files built with
CXX_ABI=gnu_v3 will not be loadable by the version of Octave built
with CXX_ABI=unknown even though we claim that we are keeping the ABI
stable for the 3.0.x release series.  And it is even worse in this
case, as it appears to the user as if they are using the same
version.  I happened to notice this problem first with 3.0.0 and
3.0.1, but later found the difference even between two 3.0.0
packages.

The symptom is that when Octave attempts to load a .oct file built
with a different setting for CXX_ABI, it reports that the function is
undefined.  This happens because Octave is looking for a symbol with
one value of CXX_ABI appended ("unknown", for example), but the file
generated with the other value of CXX_ABI has a different value
appended ("gnu_v3", for example).

I'm not sure what can be done about this now, but I wanted to alert
you to this so that we can try to ensure that it doesn't happen for
a future release series.

Perhaps we can also change the way we look for symbols in .oct files
so that we won't have this problem in the future.

jwe



More information about the Pkg-octave-devel mailing list