statically linked python

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Ralph Butler

    #1

    statically linked python

    Hi:

    I have searched the docs and google but have not totally figured
    out how to accomplish my task: On a linux box, I want to compile
    and link python so that it uses no shared libraries, but does support
    import of some "extra" modules. I have made a few attempts but
    with limited success. In particular, I have tried things like
    adding -static to the compiler options in the Makefile.

    At one point I managed to build a python that was close to what I
    wanted, e.g. when I ran "ldd python", it said:
    not a dynamic executable
    In that version, when I do some imports, e.g. sys, os, etc. they
    load fine. But, when I try to import some other modules, e.g. time,
    they are not found. I have tried similar procedures while also
    altering Modules/Setup.local (produced by configure) to contain:
    time timemodule.c # -lm # time operations and variables

    There has to be a simple, "elegant" way to accomplish this which I am
    simply overlooking. Any help would be appreciated.

    Thanks.
    --ralph
  • Serge Orlov

    #2
    Re: statically linked python

    Ralph Butler wrote:[color=blue]
    > Hi:
    >
    > I have searched the docs and google but have not totally figured
    > out how to accomplish my task: On a linux box, I want to compile
    > and link python so that it uses no shared libraries, but does support
    > import of some "extra" modules. I have made a few attempts but
    > with limited success. In particular, I have tried things like
    > adding -static to the compiler options in the Makefile.
    >
    > At one point I managed to build a python that was close to what I
    > wanted, e.g. when I ran "ldd python", it said:
    > not a dynamic executable
    > In that version, when I do some imports, e.g. sys, os, etc. they
    > load fine. But, when I try to import some other modules, e.g. time,
    > they are not found. I have tried similar procedures while also
    > altering Modules/Setup.local (produced by configure) to contain:
    > time timemodule.c # -lm # time operations and variables
    >
    > There has to be a simple, "elegant" way to accomplish this which I am
    > simply overlooking. Any help would be appreciated.[/color]

    This has nothing to do with python. glibc doesn't support loading
    shared libraries into statically linked executables. At least it didn't
    support in 2002:

    Since it still doesn't work most likely it is still not supported, but
    you may ask glibc developers what is the problem.

    Comment

    • Ralph Butler

      #3
      Re: statically linked python

      Serge Orlov wrote:[color=blue]
      > Ralph Butler wrote:[color=green]
      >> Hi:
      >>
      >> I have searched the docs and google but have not totally figured
      >> out how to accomplish my task: On a linux box, I want to compile
      >> and link python so that it uses no shared libraries, but does support
      >> import of some "extra" modules. I have made a few attempts but
      >> with limited success. In particular, I have tried things like
      >> adding -static to the compiler options in the Makefile.
      >>
      >> At one point I managed to build a python that was close to what I
      >> wanted, e.g. when I ran "ldd python", it said:
      >> not a dynamic executable
      >> In that version, when I do some imports, e.g. sys, os, etc. they
      >> load fine. But, when I try to import some other modules, e.g. time,
      >> they are not found. I have tried similar procedures while also
      >> altering Modules/Setup.local (produced by configure) to contain:
      >> time timemodule.c # -lm # time operations and variables
      >>
      >> There has to be a simple, "elegant" way to accomplish this which I am
      >> simply overlooking. Any help would be appreciated.[/color]
      >
      > This has nothing to do with python. glibc doesn't support loading
      > shared libraries into statically linked executables. At least it didn't
      > support in 2002:
      > http://www.cygwin.com/ml/libc-alpha/.../msg00079.html
      > Since it still doesn't work most likely it is still not supported, but
      > you may ask glibc developers what is the problem.
      >[/color]

      I do not want to load them. I want to statically link the code for a
      module (e.g. time) directly into the statically linked executable.
      Sorry if that was not clear.

      Comment

      • Serge Orlov

        #4
        Re: statically linked python

        Ralph Butler wrote:[color=blue]
        > Serge Orlov wrote:[color=green]
        > > Ralph Butler wrote:[color=darkred]
        > >> Hi:
        > >>
        > >> I have searched the docs and google but have not totally figured
        > >> out how to accomplish my task: On a linux box, I want to compile
        > >> and link python so that it uses no shared libraries, but does support
        > >> import of some "extra" modules. I have made a few attempts but
        > >> with limited success. In particular, I have tried things like
        > >> adding -static to the compiler options in the Makefile.
        > >>
        > >> At one point I managed to build a python that was close to what I
        > >> wanted, e.g. when I ran "ldd python", it said:
        > >> not a dynamic executable
        > >> In that version, when I do some imports, e.g. sys, os, etc. they
        > >> load fine. But, when I try to import some other modules, e.g. time,
        > >> they are not found. I have tried similar procedures while also
        > >> altering Modules/Setup.local (produced by configure) to contain:
        > >> time timemodule.c # -lm # time operations and variables
        > >>
        > >> There has to be a simple, "elegant" way to accomplish this which I am
        > >> simply overlooking. Any help would be appreciated.[/color]
        > >
        > > This has nothing to do with python. glibc doesn't support loading
        > > shared libraries into statically linked executables. At least it didn't
        > > support in 2002:
        > > http://www.cygwin.com/ml/libc-alpha/.../msg00079.html
        > > Since it still doesn't work most likely it is still not supported, but
        > > you may ask glibc developers what is the problem.
        > >[/color]
        >
        > I do not want to load them. I want to statically link the code for a
        > module (e.g. time) directly into the statically linked executable.
        > Sorry if that was not clear.[/color]

        OK, so you're asking how to make a module builtin. I haven't done that
        myself, but let me give you a hint where to look: there is list of
        builtin modules sys.builtin_mod ule_names if you search the whole python
        source distribution for some of the names in the list you'll get list
        of files where to look. I've just searched and found that only two
        files are involved: PC\config.c and setup.py

        Comment

        Working...