999
Comment: created to step through process to build python statically
|
1566
smart quotes for shell commands aren't going to work...
|
Deletions are marked like this. | Additions are marked like this. |
Line 3: | Line 3: |
/!\ '''This page is a placeholder until MicahElliott (or anyone) figures out all the steps to make this work.''' This page describes the steps required to build Python statically, derived from [http://groups.google.com/group/comp.lang.python/browse_thread/thread/eba7c323a0221b97?hl=en#3314cbe8234de6c5 this thread]. It presently covers Linux, but many of the same steps apply to other OSs. The goal is to get `ldd` to say: |
This page describes the steps required to build Python statically, derived from [[http://groups.google.com/group/comp.lang.python/browse_thread/thread/eba7c323a0221b97?hl=en#3314cbe8234de6c5|this thread]]. It presently covers Linux, but many of the same steps apply to other OSs. The goal is to get `ldd` to say: |
Line 8: | Line 6: |
$ ldd /path/to/bin/python | $ ldd /path/to/python |
Line 12: | Line 10: |
{i} Note that the `--disable-shared` option is not related to building Python statically. | Building the python binary is fairly straightforward: |
Line 14: | Line 12: |
There is a file called `Modules/Setup.local` which is designed for customizing how modules are built. | {{{ $ ./configure LDFLAGS="-static" --disable-shared $ make LDFLAGS="-static" LINKFORSHARED=" " }}} |
Line 16: | Line 17: |
GCC (and LD) offer a `-static` option to create static executables. | LINKFORSHARED=" " prevents passing -export-dynamic to the linker, which will cause the binary to be built as a dynamically linked executable. You may need additional flags to build successfully. |
Line 18: | Line 19: |
It would be nice to have a `--enable-all-static` option in the `configure` script which would take care of all this for you. For an example, try building [http://subversion.tigris.org Subversion]. | This will build a static python binary, without any of the libraries normally provided by dynamically loaded modules. To add these modules, edit Modules/Setup.local, and add {{{ *static* }}} followed by any of the modules that you want to build into your python binary. For instance, if you wanted to build in the math library, add {{{ math mathmodule.c _math.c # -lm # math library functions, e.g. sin() }}} Note that the line is not commented (unlike the corresponding line in Modules/Setup.dist). See Modules/Setup.dist for more examples and documentation. == See also == *http://stackoverflow.com/questions/1150373/compile-the-python-interpreter-statically *http://mdqinc.com/blog/2011/08/statically-linking-python-with-cython-generated-modules-and-packages/ |
Building Python Statically
This page describes the steps required to build Python statically, derived from this thread. It presently covers Linux, but many of the same steps apply to other OSs. The goal is to get ldd to say:
$ ldd /path/to/python not a dynamic executable
Building the python binary is fairly straightforward:
$ ./configure LDFLAGS="-static" --disable-shared $ make LDFLAGS="-static" LINKFORSHARED=" "
LINKFORSHARED=" " prevents passing -export-dynamic to the linker, which will cause the binary to be built as a dynamically linked executable. You may need additional flags to build successfully.
This will build a static python binary, without any of the libraries normally provided by dynamically loaded modules. To add these modules, edit Modules/Setup.local, and add
*static*
followed by any of the modules that you want to build into your python binary. For instance, if you wanted to build in the math library, add
math mathmodule.c _math.c # -lm # math library functions, e.g. sin()
Note that the line is not commented (unlike the corresponding line in Modules/Setup.dist). See Modules/Setup.dist for more examples and documentation.