gcc compile / link questions

Martin v. Löwis martin at v.loewis.de
Sat Nov 1 03:53:35 EST 2003


"Edward C. Jones" <edcjones at erols.com> writes:

> I compile and link Python extension modules using the script
> 
> gcc -fPIC -g -I/usr/local/include/python2.3 \
>   -Wall -Wstrict-prototypes -c mymodule.c
> g++ -shared mymodule.o -L/usr/local/lib -o mymodule.so
> 
> It works for me but it isn't pretty. Is there a better way to write it?

Yes, you should write a setup.py using distutils.

> Gcc finds all the libraries that need to be linked in. For example,
> "/usr/local/lib/python2.3/site-packages/numarray/libnumarray.so". How
> does gcc do this?

I doubt this statement. gcc does not find things in
/usr/local/lib/python2.3. Why do you think it does?

> I created a .so file "utilities.so" that contains some C functions
> that are called in mymodule.c but are not visible from Python. Both
> "utilities.c" and "mymodule.c" use numarray. What changes do I make in
> the script above? Must I use the nasty "libnumarray_UNIQUE_SYMBOL"
> trick?

You cannot access symbols from different extension modules; each
module has its own, separate, space of symbols. If you want to invoke
functions in a different module, you must do so through the Python
API.

Some extension modules provide a CObject containing the API; if
numarray offers such a thing, you should use it.

Regards,
Martin




More information about the Python-list mailing list