This is the mail archive of the libstdc++@gcc.gnu.org mailing list for the libstdc++ project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

ABI compatibility between different -std options


Does the usage of -std introduce any ABI incompatibility between modules that are, otherwise, built with the same gcc/libstdc++.

I'm trying to write a Perl XS module for a library that's built with -std=c++11.

Trying to build the Perl module directly as C++ generally works, but only up until the point that I introduce -std=c++11 into the mix. Although Perl's header files get wrapped inside an extern "C", -std=c++11 results in a bunch of warnings, like:

/usr/lib64/perl5/CORE/pad.h:143:19: warning: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wliteral-suffix]
 Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%"UVxf"[0x%"UVxf"]",\

Seems harmless, but there's a bunch of these, which makes me a bit edgy. I'm thinking about building an XS shim without -std=c++11, and the rest of my glue code with -std=c++11, and link them together. Would there be any ABI issues with this approach. Basically:

module1.C compiled to module1.o without -std=c++11

module2.C compiled to module2.o using -std=c++11

They'll share a header file, that declares classes without any C++11-isms.

Linked together.

Any pitfalls with that?

Attachment: pgpRPw1jJRKlP.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]