Help needed with static build: msvcrt not available

I am trying to make a static build of Python. This is so that I can get the build to work on multiple Linux platforms. I am trying to build on Rocky 8.

I think that I have successfully built the python interpreter itself:

# ldd /usr/local/bin/python3
	not a dynamic executable
# /usr/local/bin/python3 -V
Python 3.10.16

My original configure and make commands were:

./configure LDFLAGS="--static" --disable-shared
make LDFLAGS="--static" LINKFORSHARED=" "
make install

However, pip (pip3) doesn’t work. It complains about a missing module “msvcrt”:

# /usr/local/bin/pip3 install fusesoc
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/subprocess.py", line 69, in <module>
    import msvcrt
ModuleNotFoundError: No module named 'msvcrt'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/pip3", line 5, in <module>
    from pip._internal.cli.main import main
  File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/main.py", line 9, in <module>
    from pip._internal.cli.autocompletion import autocomplete
  File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/autocompletion.py", line 10, in <module>
    from pip._internal.cli.main_parser import create_main_parser
  File "/usr/local/lib/python3.10/site-packages/pip/_internal/cli/main_parser.py", line 5, in <module>
    import subprocess
  File "/usr/local/lib/python3.10/subprocess.py", line 74, in <module>
    import _posixsubprocess
ImportError: /usr/local/lib/python3.10/lib-dynload/_posixsubprocess.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyTuple_Type

I don’t think that I need pip to be statically built (once I install fusesoc, then I can bundle everything).

I put “msvcrt” in the file Modules/Setup.local and ran make again, but got the following:

# make
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include    -DPy_BUILD_CORE \
	-DABIFLAGS='""' \
	-DMULTIARCH=\"x86_64-linux-gnu\" \
	-o Python/sysmodule.o ./Python/sysmodule.c
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include    -DPy_BUILD_CORE \
	-DSOABI='"cpython-310-x86_64-linux-gnu"' \
	-o Python/dynload_shlib.o ./Python/dynload_shlib.c
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include    -DPy_BUILD_CORE -o Modules/config.o Modules/config.c
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include    -DPy_BUILD_CORE -DPYTHONPATH='""' \
	-DPREFIX='"/usr/local"' \
	-DEXEC_PREFIX='"/usr/local"' \
	-DVERSION='"3.10"' \
	-DVPATH='""' \
	-o Modules/getpath.o ./Modules/getpath.c
gcc -pthread -c -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall    -std=c99 -Wextra -Wno-unused-result -Wno-unused-parameter -Wno-missing-field-initializers -Werror=implicit-function-declaration -fvisibility=hidden  -I./Include/internal  -I. -I./Include    -DPy_BUILD_CORE \
      -DGITVERSION="\"`LC_ALL=C `\"" \
      -DGITTAG="\"`LC_ALL=C `\"" \
      -DGITBRANCH="\"`LC_ALL=C `\"" \
      -o Modules/getbuildinfo.o ./Modules/getbuildinfo.c
rm -f libpython3.10.a
ar rcs libpython3.10.a Modules/getbuildinfo.o Parser/token.o  Parser/pegen.o Parser/parser.o Parser/string_parser.o Parser/peg_api.o Parser/myreadline.o Parser/tokenizer.o Objects/abstract.o Objects/accu.o Objects/boolobject.o Objects/bytes_methods.o Objects/bytearrayobject.o Objects/bytesobject.o Objects/call.o Objects/capsule.o Objects/cellobject.o Objects/classobject.o Objects/codeobject.o Objects/complexobject.o Objects/descrobject.o Objects/enumobject.o Objects/exceptions.o Objects/genericaliasobject.o Objects/genobject.o Objects/fileobject.o Objects/floatobject.o Objects/frameobject.o Objects/funcobject.o Objects/interpreteridobject.o Objects/iterobject.o Objects/listobject.o Objects/longobject.o Objects/dictobject.o Objects/odictobject.o Objects/memoryobject.o Objects/methodobject.o Objects/moduleobject.o Objects/namespaceobject.o Objects/object.o Objects/obmalloc.o Objects/picklebufobject.o Objects/rangeobject.o Objects/setobject.o Objects/sliceobject.o Objects/structseq.o Objects/tupleobject.o Objects/typeobject.o Objects/unicodeobject.o Objects/unicodectype.o Objects/unionobject.o Objects/weakrefobject.o Python/_warnings.o Python/Python-ast.o Python/asdl.o Python/ast.o Python/ast_opt.o Python/ast_unparse.o Python/bltinmodule.o Python/ceval.o Python/codecs.o Python/compile.o Python/context.o Python/dynamic_annotations.o Python/errors.o Python/frozenmain.o Python/future.o Python/getargs.o Python/getcompiler.o Python/getcopyright.o Python/getplatform.o Python/getversion.o Python/hamt.o Python/hashtable.o Python/import.o Python/importdl.o Python/initconfig.o Python/marshal.o Python/modsupport.o Python/mysnprintf.o Python/mystrtoul.o Python/pathconfig.o Python/preconfig.o Python/pyarena.o Python/pyctype.o Python/pyfpe.o Python/pyhash.o Python/pylifecycle.o Python/pymath.o Python/pystate.o Python/pythonrun.o Python/pytime.o Python/bootstrap_hash.o Python/structmember.o Python/symtable.o Python/sysmodule.o Python/thread.o Python/traceback.o Python/getopt.o Python/pystrcmp.o Python/pystrtod.o Python/pystrhex.o Python/dtoa.o Python/formatter_unicode.o Python/fileutils.o Python/suggestions.o Python/dynload_shlib.o    Modules/config.o Modules/getpath.o Modules/main.o Modules/gcmodule.o Modules/posixmodule.o  Modules/errnomodule.o  Modules/pwdmodule.o  Modules/_sre.o  Modules/_codecsmodule.o  Modules/_weakref.o  Modules/_functoolsmodule.o  Modules/_operator.o  Modules/_collectionsmodule.o  Modules/_abc.o  Modules/itertoolsmodule.o  Modules/atexitmodule.o  Modules/signalmodule.o  Modules/_stat.o  Modules/timemodule.o  Modules/_threadmodule.o  Modules/_localemodule.o  Modules/_iomodule.o Modules/iobase.o Modules/fileio.o Modules/bytesio.o Modules/bufferedio.o Modules/textio.o Modules/stringio.o  Modules/faulthandler.o  Modules/_tracemalloc.o  Modules/symtablemodule.o  Modules/xxsubtype.o Python/frozen.o
gcc -pthread --static    -Xlinker -export-dynamic -o python Programs/python.o libpython3.10.a -lcrypt -lpthread -ldl  -lutil -lm   -lm 
libpython3.10.a(dynload_shlib.o): In function `_PyImport_FindSharedFuncptr':
/tmp/docker_tmp/Python-3.10.16/./Python/dynload_shlib.c:100: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
libpython3.10.a(posixmodule.o): In function `os_getgrouplist_impl':
/tmp/docker_tmp/Python-3.10.16/./Modules/posixmodule.c:7548: warning: Using 'getgrouplist' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
libpython3.10.a(posixmodule.o): In function `os_initgroups_impl':
/tmp/docker_tmp/Python-3.10.16/./Modules/posixmodule.c:7747: warning: Using 'initgroups' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
libpython3.10.a(pwdmodule.o): In function `pwd_getpwall_impl':
/tmp/docker_tmp/Python-3.10.16/./Modules/pwdmodule.c:300: warning: Using 'getpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/docker_tmp/Python-3.10.16/./Modules/pwdmodule.c:299: warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/tmp/docker_tmp/Python-3.10.16/./Modules/pwdmodule.c:310: warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
libpython3.10.a(pwdmodule.o): In function `pwd_getpwnam_impl':
/tmp/docker_tmp/Python-3.10.16/./Modules/pwdmodule.c:247: warning: Using 'getpwnam_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
libpython3.10.a(pwdmodule.o): In function `pwd_getpwuid':
/tmp/docker_tmp/Python-3.10.16/./Modules/pwdmodule.c:164: warning: Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
libpython3.10.a(config.o):(.data+0x8): undefined reference to `PyInit_msvcrt'
collect2: error: ld returned 1 exit status
make: *** [Makefile:601: python] Error 1

This:

isn’t needed on Linux. Has something gone wrong during the configuration step, to make something else think it’s cross compiling?

msvcrt should not (and, really, cannot) be built on Linux. The real error is the ImportError after that:

I’m afraid I’m not much help in resolving that, other than pointing to it as the real issue.

I didn’t see anything wrong. I’ll rebuild and look again.

I saved the stdout and stderr from re-running configure and it shows that it doesn’t think it is cross-compiling:

checking host system type... x86_64-pc-linux-gnu
checking for python3.10... no
checking for python3... python3
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... "linux"
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no

There are some warnings, which may really be errors when running make:

*** WARNING: renaming "_struct" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_struct.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyByteArray_Type
*** WARNING: renaming "array" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/array.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyByteArray_Type
*** WARNING: renaming "_contextvars" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_contextvars.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyContext_Type
*** WARNING: renaming "math" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/math.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "cmath" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/cmath.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "_datetime" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_datetime.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_NotImplementedError
*** WARNING: renaming "_zoneinfo" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_zoneinfo.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyTuple_Type
*** WARNING: renaming "_random" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_random.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_bisect" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_bisect.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_heapq" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_heapq.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_RuntimeError
*** WARNING: renaming "_pickle" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_pickle.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_NotImplementedError
*** WARNING: renaming "_json" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_json.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "_lsprof" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_lsprof.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyModule_Type
*** WARNING: renaming "unicodedata" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/unicodedata.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyModule_Type
*** WARNING: renaming "_opcode" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_opcode.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_asyncio" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_asyncio.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_KeyboardInterrupt
*** WARNING: renaming "_queue" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_queue.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_MemoryError
*** WARNING: renaming "_statistics" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_statistics.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "fcntl" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/fcntl.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "grp" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/grp.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_KeyError
*** WARNING: renaming "spwd" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/spwd.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_KeyError
*** WARNING: renaming "select" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/select.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_RuntimeError
*** WARNING: renaming "mmap" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/mmap.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "syslog" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/syslog.cpython-310-x86_64-linux-gnu.so: undefined symbol: _Py_NoneStruct
*** WARNING: renaming "_xxsubinterpreters" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_xxsubinterpreters.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyMem_Free
*** WARNING: renaming "audioop" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/audioop.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "_csv" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_csv.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_SystemError
*** WARNING: renaming "_posixsubprocess" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_posixsubprocess.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyTuple_Type
*** WARNING: renaming "_testcapi" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_testcapi.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_SystemError
*** WARNING: renaming "_testclinic" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_testclinic.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "_testinternalcapi" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_testinternalcapi.cpython-310-x86_64-linux-gnu.so: undefined symbol: _Py_NoneStruct
*** WARNING: renaming "_testbuffer" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_testbuffer.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "_testimportmultiple" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_testimportmultiple.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyModule_Create2
*** WARNING: renaming "_testmultiphase" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_testmultiphase.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_SystemError
*** WARNING: renaming "_xxtestfuzz" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_xxtestfuzz.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_RecursionError
*** WARNING: renaming "_curses" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_curses.cpython-310-x86_64-linux-gnu.so: undefined symbol: _PyRuntime
*** WARNING: renaming "_curses_panel" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_curses_panel.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_RuntimeError
*** WARNING: renaming "_crypt" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_crypt.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_socket" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_socket.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyByteArray_Type
*** WARNING: renaming "_ssl" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_ssl.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_OSError
*** WARNING: renaming "_hashlib" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_hashlib.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_sha256" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_sha256.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "_sha512" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_sha512.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "_md5" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_md5.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "_sha1" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_sha1.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "_blake2" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_blake2.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "_sha3" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_sha3.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_BufferError
*** WARNING: renaming "_sqlite3" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_sqlite3.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "termios" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/termios.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_TypeError
*** WARNING: renaming "resource" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/resource.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "ossaudiodev" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/ossaudiodev.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "zlib" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/zlib.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_MemoryError
*** WARNING: renaming "binascii" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/binascii.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_bz2" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_bz2.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_SystemError
*** WARNING: renaming "_lzma" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_lzma.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_MemoryError
*** WARNING: renaming "pyexpat" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/pyexpat.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyByteArray_Type
*** WARNING: renaming "_elementtree" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_elementtree.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyBytes_Type
*** WARNING: renaming "_multibytecodec" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_multibytecodec.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_RuntimeError
*** WARNING: renaming "_codecs_kr" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_codecs_kr.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_TypeError
*** WARNING: renaming "_codecs_jp" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_codecs_jp.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_TypeError
*** WARNING: renaming "_codecs_cn" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_codecs_cn.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_TypeError
*** WARNING: renaming "_codecs_tw" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_codecs_tw.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_TypeError
*** WARNING: renaming "_codecs_hk" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_codecs_hk.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_codecs_iso2022" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_codecs_iso2022.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_ValueError
*** WARNING: renaming "_decimal" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_decimal.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyFloat_Type
*** WARNING: renaming "_ctypes_test" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_ctypes_test.cpython-310-x86_64-linux-gnu.so: undefined symbol: _Py_NoneStruct
*** WARNING: renaming "_multiprocessing" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_multiprocessing.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_RuntimeError
*** WARNING: renaming "_posixshmem" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_posixshmem.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_OSError
*** WARNING: renaming "xxlimited" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/xxlimited.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyExc_TypeError
*** WARNING: renaming "xxlimited_35" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/xxlimited_35.cpython-310-x86_64-linux-gnu.so: undefined symbol: _Py_NotImplementedStruct
*** WARNING: renaming "_ctypes" since importing it failed: /tmp/docker_tmp/Python-3.10.16/build/lib.linux-x86_64-3.10/_ctypes.cpython-310-x86_64-linux-gnu.so: undefined symbol: PyTuple_Type

The necessary bits to build these optional modules were not found:
_dbm                  _gdbm                 _tkinter           
_uuid                 nis                   readline           
To find the necessary bits, look in setup.py in detect_modules() for the module's name.

I did see some issues relating to Openssl when building:

Following modules built successfully but were removed because they could not be imported:
_asyncio              _bisect               _blake2            
_bz2                  _codecs_cn            _codecs_hk         
_codecs_iso2022       _codecs_jp            _codecs_kr         
_codecs_tw            _contextvars          _crypt             
_csv                  _ctypes               _ctypes_test       
_curses               _curses_panel         _datetime          
_decimal              _elementtree          _hashlib           
_heapq                _json                 _lsprof            
_lzma                 _md5                  _multibytecodec    
_multiprocessing      _opcode               _pickle            
_posixshmem           _posixsubprocess      _queue             
_random               _sha1                 _sha256            
_sha3                 _sha512               _socket            
_sqlite3              _ssl                  _statistics        
_struct               _testbuffer           _testcapi          
_testclinic           _testimportmultiple   _testinternalcapi  
_testmultiphase       _xxsubinterpreters    _xxtestfuzz        
_zoneinfo             array                 audioop            
binascii              cmath                 fcntl              
grp                   math                  mmap               
ossaudiodev           pyexpat               resource           
select                spwd                  syslog             
termios               unicodedata           xxlimited          
xxlimited_35          zlib                                     


Could not build the ssl module!
Python requires a OpenSSL 1.1.1 or newer

This is a little odd, since the container has Openssl-1.1.1k:

# rpm -qa | grep openssl
apr-util-openssl-1.6.1-9.el8.x86_64
openssl-1.1.1k-14.el8_10.x86_64
openssl-libs-1.1.1k-14.el8_10.x86_64
openssl-devel-1.1.1k-14.el8_10.x86_64
openssl-pkcs11-0.4.10-3.el8.x86_64

Just in case it makes a difference, I am doing this in a Docker container, not a full OS.

Does this message mean that my static build won’t actually be portable to systems with a different version of glibc?

/tmp/docker_tmp/Python-3.10.16/./Python/dynload_shlib.c:100: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

These are not OpenSSL related, this is telling you that none of the modules built are actually usable.

How are you configuring and building? You already answered this in the first post and I missed it, sorry.

I believe your trouble is in specifying LDFLAGS and LINKFORSHARED. Instead, have a look at the Modules/Setup (and Modules/Setup.local) file.

1 Like

I was curious, and spun up a VPS running Rocky. I could compile 3.14b on it, but not 3.10.16 at all, even without your options for a static build (just plain old ./configure and make -s -j 2):

 CC='gcc' LDSHARED='gcc -shared    ' OPT='-DNDEBUG -g -fwrapv -O3 -Wall'        _TCLTK_INCLUDES='' _TCLTK_LIBS=''      ./python -E ./setup.py -q build
/root/cpython-3.10.16/Modules/_ctypes/_ctypes.c:107:10: fatal error: ffi.h: No such file or directory
  107 | #include <ffi.h>
      |          ^~~~~~~
compilation terminated.

If you just want a Linux distro independent build of Python, check out how indiegreg does it:

I’d be very surprised if it’s as simple as just setting a few different config and make flags.

Thanks for this link. I am trying it now.

The portable builds look like exactly what I want. Thank you very much for pointing me to them!

1 Like