|
SWIG runtime libs/Python distutils combo on Mac: msg#00176programming.swig
This problem concerns using distutils to compile a set of python modules that are generated by SWIG, so I am cross-posting to both SWIG and distutils mailing lists. I use SWIG to wrap several packages that are intended to be both independent and interoperable. So I am creating separate python extensions that link to the swig runtime libraries. Previously, I linked to installed system runtime libraries, but this is not the preferred approach, and indeed, swig 1.3.22 does not support it. Instead, I am supposed to generate my own local runtime library, and link to it. Fine; this would seem to be more portable. The SWIG documentation says to do the following (for Linux), with the caveat that compiling dynamic libraries is different on every system: ------------------ % swig -runtime -python swigrun.i % gcc -fpic swigrun_wrap.c -o swigrun_wrap.o % gcc -shared swigrun_wrap.o -o libswigrunpy.so Now, you compile all of the normal SWIG modules using the -noruntime option: % swig -noruntime -c++ -python A.i % swig -noruntime -c++ -python B.i Finally, when linking the dynamically loadable modules, you need to link again the special runtime library above. For example (Linux) : % g++ -shared A_wrap.o -L. -lswigrunpy -o _A.so % g++ -shared B_wrap.o -L. -lswigrunpy -o _B.so ------------------ To get around the portability problem, I have decided to use python's distutils module to handle the compilation issues. In my setup.py script, I define SwigRun = Extension("PyTrilinos.libswigrun", ["src/swigrun_wrap.c"]) and this works, as build/lib.blahblahblah/PyTrilinos/libswigrun.so gets created properly. When I define real extensions in setup.py, they are created with keyword arguments library_dirs = [..., "build/lib.blahblahblah/PyTrilinos", ...], libraries = [..., "swigrun", ...], which gives me the link command arguments I want: -Lbuild/lib.blahblahblah/PyTrilinons -lswigrun. However, on my Mac, when the link command is invoked, I get ld: can't locate file for: -lswigrun I strongly suspect that the Mac's ld command does not search for libswigrun.so when -lswigrun is given as a command line argument (the old system libraries have .la and .dylib extensions). But I cannot figure out how to get setup.py to compile to a different suffix. Any suggestions would be appreciated. ** Bill Spotz ** ** Sandia National Laboratories Voice: (505)845-0170 ** ** P.O. Box 5800 Fax: (505)284-5451 ** ** Albuquerque, NM 87185-0316 Email: wfspotz@xxxxxxxxxx ** _______________________________________________ Distutils-SIG maillist - Distutils-SIG@xxxxxxxxxx http://mail.python.org/mailman/listinfo/distutils-sig |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | Wrapping __declspec(dllimport) and __stdcall: 00176, Gary Nissen |
|---|---|
| Next by Date: | Smartpointer and references: 00176, Felix Domke |
| Previous by Thread: | Wrapping __declspec(dllimport) and __stdcalli: 00176, Gary Nissen |
| Next by Thread: | Re: SWIG runtime libs/Python distutils combo on Mac: 00176, Bob Ippolito |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |