Problem with linking embedding C application

Mads Bondo Dydensborg madsdyd at challenge.dk
Mon Oct 1 08:01:21 EDT 2001


On Mon, 1 Oct 2001, Olivier Deme wrote:

> Thanks for the link to the demo application.
> Indeed it seems that there a plenty of libraries to link with...
> 
> Something also really annoying:
> The libraries are located in an unusual place on my machine:
> /usr/local/lib/python2.1/config/
> 
> Plus, the fact that libpython*.a has its version number in the file name.
> That means that if our customer has a different version of Python, they
> won't be able to link our application!
> Usually, this should be solved by adding a symbolink link in a common
> directory. Sonething like:
> /usr/lib/libpython.a -> /usr/local/lib/python2.1/config/libpython2.1.a
> 
> But this is not done during installation of Python. How are we supposed to know
> the version used by the people who are going to build our application?

I have found that out - the pygtk code includes autoconf (are you using
autoconf) code that calls python (douh). (This is just an expert, be sure
to review the entire file - acinclude.m4 from the pygtk distribution).

    changequote(<<, >>)dnl
    prog="
import sys, string
minver = '$1'
pyver = string.split(sys.version)[0]  # first word is version string
# split strings by '.' and convert to numeric
minver = map(string.atoi, string.split(minver, '.'))
if hasattr(sys, 'version_info'):
    pyver = sys.version_info[:3]
else:
    pyver = map(string.atoi, string.split(pyver, '.'))
# we can now do comparisons on the two lists:
if pyver >= minver:
        sys.exit(0)
else:
        sys.exit(1)"
    changequote([, ])dnl
    if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC

The library can be found from constructions like the following

py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"`
PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}"

There are standard places the library go, when you have the exec_prefix (I
think).

Linking is the great problem here (linker options). I found 
http://sources.redhat.com/ml/bug-autoconf/2001/msg00297.html
(it is 4000 lines). Search for KDE_CHECK_PYTHON for how they test for some
common linker requirements.

It is a mess though.

Mads

-- 
Mads Bondo Dydensborg.                               madsdyd at challenge.dk
In a stinging rebuke, a federal judge Monday ruled Microsoft Corp. violated
the nation's antitrust laws by using its monopoly power in personal computer
operating systems to stifle competition.
                        - CNN Financial News April 03, 2000: 7:53 p.m. ET





More information about the Python-list mailing list