GNOME Bugzilla – Bug 620215
Undefined references when linking libpyglib-2.0-python.so
Last modified: 2011-03-21 14:35:13 UTC
When building pygobject with LDFLAGS="-Wl,--no-undefined", it fails on lining libpyglib-2.0-python.so: libtool: link: gcc -shared -Wl,--as-needed .libs/libpyglib_2_0_python_la-pyglib.o -pthread -Wl,--as-needed -Wl,--no-undefined -Wl,-z -Wl,relro -Wl,-O1 -Wl,--build-id -pthread -pthread /usr/lib64/libgobject-2.0.so /usr/lib64/libgthread-2.0.so -lrt /usr/lib64/libglib-2.0.so -lffi -Wl,-soname -Wl,libpyglib-2.0-python.so.0 -o .libs/libpyglib-2.0-python.so.0.0.0 mv -f .deps/_glib_la-pygspawn.Tpo .deps/_glib_la-pygspawn.Plo .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_option_context_new': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:500: undefined reference to `PyObject_Malloc' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:500: undefined reference to `PyObject_Init' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_option_group_new': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:477: undefined reference to `PyObject_Malloc' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:477: undefined reference to `PyObject_Init' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_main_context_new': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:419: undefined reference to `PyObject_Malloc' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:419: undefined reference to `PyObject_Init' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_register_exception_for_domain': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:394: undefined reference to `PyErr_NewException' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:399: undefined reference to `PyInt_FromLong' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:399: undefined reference to `PyDict_SetItem' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:397: undefined reference to `PyDict_New' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_gerror_exception_check': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:321: undefined reference to `PyErr_Fetch' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:324: undefined reference to `PyErr_NormalizeException' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:331: undefined reference to `PyErr_GivenExceptionMatches' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:340: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:346: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:353: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:372: undefined reference to `PyExc_ValueError' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:372: undefined reference to `PyErr_SetString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:373: undefined reference to `PyErr_Print' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:361: undefined reference to `PyString_AsString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:362: undefined reference to `PyInt_AsLong' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:361: undefined reference to `PyString_AsString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:333: undefined reference to `PyErr_Restore' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:334: undefined reference to `PyErr_Print' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:326: undefined reference to `PyErr_Restore' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:327: undefined reference to `PyErr_Print' .libs/libpyglib_2_0_python_la-pyglib.o: In function `_pyglib_handler_marshal': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:562: undefined reference to `PyTuple_GetItem' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:562: undefined reference to `PyTuple_GetItem' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:562: undefined reference to `PyObject_CallObject' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:568: undefined reference to `PyObject_IsTrue' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:565: undefined reference to `PyErr_Print' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_error_check': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:267: undefined reference to `PyInt_FromLong' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:267: undefined reference to `PyDict_GetItem' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:272: undefined reference to `_PyObject_CallFunction_SizeT' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:280: undefined reference to `_Py_NoneStruct' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:280: undefined reference to `PyObject_SetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:283: undefined reference to `PyInt_FromLong' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:282: undefined reference to `PyObject_SetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:288: undefined reference to `PyString_FromString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:287: undefined reference to `PyObject_SetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:294: undefined reference to `PyErr_SetObject' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:276: undefined reference to `PyString_FromString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:275: undefined reference to `PyObject_SetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:291: undefined reference to `_Py_NoneStruct' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:291: undefined reference to `PyObject_SetAttrString' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_enable_threads': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:162: undefined reference to `PyEval_InitThreads' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:167: undefined reference to `PyThread_create_key' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_init_internal': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:91: undefined reference to `PyCObject_AsVoidPtr' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_init': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:52: undefined reference to `PyImport_ImportModule' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:73: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:74: undefined reference to `PyCObject_Type' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:77: undefined reference to `PyExc_ImportError' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:77: undefined reference to `PyErr_SetString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:54: undefined reference to `PyErr_Occurred' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:57: undefined reference to `PyErr_Fetch' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:58: undefined reference to `PyObject_Repr' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:62: undefined reference to `PyString_AsString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:62: undefined reference to `PyExc_ImportError' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:62: undefined reference to `PyErr_Format' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:75: undefined reference to `PyCObject_AsVoidPtr' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:83: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:84: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:85: undefined reference to `PyObject_GetAttrString' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:67: undefined reference to `PyExc_ImportError' /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:67: undefined reference to `PyErr_SetString' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_float_from_timeval': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:524: undefined reference to `PyFloat_FromDouble' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_gil_state_release_py23': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:193: undefined reference to `PyGILState_Release' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_gil_state_release': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:121: undefined reference to `PyGILState_Release' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_gil_state_ensure_py23': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:187: undefined reference to `PyGILState_Ensure' .libs/libpyglib_2_0_python_la-pyglib.o: In function `pyglib_gil_state_ensure': /tmp/python-gobject/BUILD/pygobject-2.21.1/glib/pyglib.c:110: undefined reference to `PyGILState_Ensure' collect2: ld returned 1 exit status make[2]: *** [libpyglib-2.0-python.la] Error 1 IMHO, -lpython2.6 (or what ever version it reads) should be added into libpyglib_2_0_la_LIBADD.
*** Bug 639596 has been marked as a duplicate of this bug. ***
Created attachment 178504 [details] [review] Kill JD_CHECK_PYTHON_HEADERS Use AM_CHECK_PYTHON_HEADERS instead, which is identical.
Created attachment 178505 [details] [review] Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES
You should not link a Python module with -Wl,-no-undefined, because normally you do NOT link it to libpython. It would be nice if you could revert this change, since it breaks distributions which support multiple Python versions, such as Debian and Ubuntu.
FWIW you should never link to libpython because otherwise you'll have the complete python library in memory twice when using the module from the interpreter. The interpreter statically links to libpython for better startup times.
I'm reopening this, attachment 178505 [details] [review] should just be reverted.
This hurt us as well, so we applied a hackish workaround in our packages. As discussed on IRC and requested by Tomeu and Simon, I reverted this: http://git.gnome.org/browse/pygobject/commit/?id=5ac534ac3ceee3cc19fe2297e3cd009817ed726f also in stable branch: http://git.gnome.org/browse/pygobject/commit/?h=pygobject-2-28&id=ac11dc70b34fe077be18f7e605c9f3cce03ad3fa
So I guess the remainder of the original bug is a "won't fix" then.