Subject: Re: [Boost-bugs] [Boost C++ Libraries] #2615: boost 1.37.0 does not link against libpython
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2008-12-30 03:14:49
#2615: boost 1.37.0 does not link against libpython
----------------------------------+-----------------------------------------
Reporter: fundawang_at_[hidden] | Owner: dave
Type: Bugs | Status: closed
Milestone: Boost 1.38.0 | Component: Building Boost
Version: Boost 1.37.0 | Severity: Problem
Resolution: invalid | Keywords:
----------------------------------+-----------------------------------------
Changes (by anonymous):
* status: reopened => closed
* resolution: => invalid
Comment:
Replying to [comment:5 jhunold]:
> > What does "direct linking" mean, precisely?
> adding -lpython to the linker command line when linking
libboost_python.so
> > Will direct linking" against libpython.so force libpython.so to be
loaded when the Python executable loads an extension module that uses
libboost_python.so?
> Yes, of course. Does this cause any problems ?
Yes, of course. It forces a dependency on libpython.so and increases the
overall runtime image, aside from very likely causing duplicate copies of
the code, and more worryingly, globals.
> I've just dug out that I've patched python.jam to link extension modules
against libpython.so due to a bug in the preview version of gold, the new
ld replacement from Google which did not support undefined symbols at that
time. Will attach the patch right now, although it seems not to be needed
anymore with binutils 2.19. My (one and only experimental) module works
fine with and without explicit linking to libpython.
Can you pass the Boost.Python test suite?
{{{
cd libs/python/test
bjam
}}}
> > What does the windows platform have to do with this?
> Nothing directly. -no-undefined is just a tool to assist in cross-
platform development. The usage is to spot unexported/undefined symbols
when using gnu ld on unix platforms. Remember, gnu ld allows for symbols
to be undefined at link time
Believe me, I know
> (this is used when linking libboost_python right now). msvc link.exe
needs all symbols to be explicitly exported/imported for all libraries the
current .dll depends on. So if you use gcc visibility and -no-undefined
you are less likely to check out on windows and hit "missing" symbols due
to forgotten "dllexport/-import" specifications." This is the way Qt goes
and which I use to minimize broken builds on Windows because my main
development platform is Linux.
It's a nice technique, but it's not equivalent at all when it comes to
Python because on Windows, python.exe uses the python shared library while
on unix the python executable does not.
Still willing to have you re-open the ticket if you still believe I'm
wrong.
-- Ticket URL: <https://svn.boost.org/trac/boost/ticket/2615#comment:6> Boost C++ Libraries <http://www.boost.org/> Boost provides free peer-reviewed portable C++ source libraries.
This archive was generated by hypermail 2.1.7 : 2017-02-16 18:49:59 UTC