Problem with linking embedding C application

Mads Bondo Dydensborg madsdyd at challenge.dk
Mon Oct 1 07:16:58 EDT 2001


On Mon, 1 Oct 2001, Olivier Deme wrote:

> Hi,
> 
> We have written an application written in C, which invokes sometimes the Python 
> interpreter for executing Python methods.
> 
> So, I am trying to statically link our application with libpython*.*.a., but this result in various 
> undefined symbols (see below).
> 
> Now, it looks like I am missing symbols defined in the math and posix
> thread library! I don't understand this since we are not using any
> symbols defined in these libraries.

No, but the statically linked python lib is.

> Could anybody tell me what is going on and how I can fix this problem?

I am having similar troubles, although mine is trying to identify these
libs automatically. (Using autoconf - you replied to this thread, I can
see.)
> 
> /lib/libpython.a(posixmodule.o): In function `posix_tmpnam':
> /home/odeme/Python-2.1.1/./Modules/posixmodule.c:4212: the use of `tmpnam_r' is dangerous, better use `mkstemp'
> /lib/libpython.a(posixmodule.o): In function `posix_tempnam':
> /home/odeme/Python-2.1.1/./Modules/posixmodule.c:4168: the use of `tempnam' is dangerous, better use `mkstemp'

These are just (annoying) warnings from stuff used in the belly of
python.

> /lib/libpython.a(floatobject.o): In function `float_pow':
> /home/odeme/Python-2.1.1/Objects/floatobject.c:532: undefined reference to `pow'
> /lib/libpython.a(dynload_shlib.o): In function `_PyImport_GetDynLoadFunc':
> /home/odeme/Python-2.1.1/Python/dynload_shlib.c:86: undefined reference to `dlopen'
> /home/odeme/Python-2.1.1/Python/dynload_shlib.c:94: undefined reference to `dlerror'
> /home/odeme/Python-2.1.1/Python/dynload_shlib.c:99: undefined reference to `dlsym'
> /lib/libpython.a(thread.o): In function `PyThread_start_new_thread':
> /home/odeme/Python-2.1.1/Python/thread_pthread.h:135: undefined reference to `pthread_create'
> /home/odeme/Python-2.1.1/Python/thread_pthread.h:159: undefined reference to `pthread_detach'
> /lib/libpython.a(posixmodule.o): In function `posix_openpty':
> /home/odeme/Python-2.1.1/./Modules/posixmodule.c:1754: undefined reference to `openpty'
> /lib/libpython.a(posixmodule.o): In function `posix_forkpty':
> /home/odeme/Python-2.1.1/./Modules/posixmodule.c:1785: undefined reference to `forkpty'
> /lib/libpython.a(complexobject.o): In function `_Py_c_pow':
> /home/odeme/Python-2.1.1/Objects/complexobject.c:139: undefined reference to `pow'
> /home/odeme/Python-2.1.1/Objects/complexobject.c:143: undefined reference to `exp'
> /home/odeme/Python-2.1.1/Objects/complexobject.c:144: undefined reference to `log'
> /home/odeme/Python-2.1.1/Objects/complexobject.c:146: undefined reference to `cos'
> /home/odeme/Python-2.1.1/Objects/complexobject.c:147: undefined reference to `sin'
> collect2: ld returned 1 exit status

I think that you may need to add at least
-lpthread -lm -lutil 
to you ld line?

I have a machine, where I need to do:
 -lnsl -ldl -lreadline -ltermcap -lpthread -lutil -lm
to be able to link with python.

The annoying thing is, that it is very hard to determine this in
general. At least I am not aware of any way to do it.

Mads

-- 
Mads Bondo Dydensborg.                               madsdyd at challenge.dk
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/J d- s+:+ a- C++ UL++++ P++ L++> E(++) W+ N w-- X- !tv b+ DI++ e++> h--
------END GEEK CODE BLOCK------






More information about the Python-list mailing list