gcc compile / link questions

  • Thread starter Edward C. Jones
  • Start date
E

Edward C. Jones

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?

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 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?

What is a script for creating "utilities.a" using gcc? How do I change
the script above to include "utilities.a"?
 
M

Martin v. =?iso-8859-15?q?L=F6wis?=

Edward C. Jones said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top