[Python-Dev] Linux Python linking with G++? (original) (raw)
"Martin v. Löwis" martin at v.loewis.de
Fri Jul 8 00:13:13 CEST 2005
- Previous message: [Python-Dev] Linux Python linking with G++?
- Next message: [Python-Dev] Linux Python linking with G++?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
David Abrahams wrote:
Apparently Python on some linux distros is being linked by g++ rather than gcc, resulting in the C++ runtime library being linked into Python; this has bad consequences for compatibility between C++ extension modules and Pythons that have been built with different versions of GCC. Is this behavior intentional?
It's as Skip says. According to the C++ standard, a "C++ program" is one where all translation units are written in C++. While most platforms offer interoperability between C and C++ in the sense that C libraries can be linked into C++ programs, interoperability in the other direction is not always supported, i.e. C programs may not be able to use C++ libraries. This is the specific case you are talking about: Python is written in C, yet the extension might be written in C++.
Now, on some of these implementations, things can be fixed by writing main() as a C++ translation unit, and compiling it with the C++ compiler. Then, Python itself is a C library to this C++ program, and the extension modules are C++ libraries. Then everything works fine.
To support this, main() must be a C++ program. Python compiles main using the C++ compiler if configure thinks this is necessary.
Doing so is necessary for example on systems using the G++ collect2 mechanism for static initializers: compiling main with g++ leads to a call to __main(), which is then created by collect2.
configure thinks that using CXX for linking is necessary if compiling a program using CXX and linking it using CC fails.
Regards, Martin
- Previous message: [Python-Dev] Linux Python linking with G++?
- Next message: [Python-Dev] Linux Python linking with G++?
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]