After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 620215 - Undefined references when linking libpyglib-2.0-python.so
Undefined references when linking libpyglib-2.0-python.so
Status: RESOLVED WONTFIX
Product: pygobject
Classification: Bindings
Component: general
2.21.x
Other Linux
: Normal normal
: ---
Assigned To: Nobody's working on this now (help wanted and appreciated)
Python bindings maintainers
: 639596 (view as bug list)
Depends on:
Blocks:
 
 
Reported: 2010-06-01 05:40 UTC by Funda Wang
Modified: 2011-03-21 14:35 UTC
See Also:
GNOME target: ---
GNOME version: 2.29/2.30


Attachments
Kill JD_CHECK_PYTHON_HEADERS (2.40 KB, patch)
2011-01-17 13:44 UTC, Simon van der Linden
committed Details | Review
Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES (3.74 KB, patch)
2011-01-17 13:45 UTC, Simon van der Linden
rejected Details | Review

Description Funda Wang 2010-06-01 05:40:14 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.
Comment 1 Simon van der Linden 2011-01-16 09:55:39 UTC
*** Bug 639596 has been marked as a duplicate of this bug. ***
Comment 2 Simon van der Linden 2011-01-17 13:44:59 UTC
Created attachment 178504 [details] [review]
Kill JD_CHECK_PYTHON_HEADERS

Use AM_CHECK_PYTHON_HEADERS instead, which is identical.
Comment 3 Simon van der Linden 2011-01-17 13:45:18 UTC
Created attachment 178505 [details] [review]
Deduce PYTHON_LIBS in addition to PYTHON_INCLUDES
Comment 4 Josselin Mouette 2011-03-18 10:19:32 UTC
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.
Comment 5 Sebastian Dröge (slomo) 2011-03-18 10:39:31 UTC
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.
Comment 6 Johan (not receiving bugmail) Dahlin 2011-03-18 11:21:44 UTC
I'm reopening this, attachment 178505 [details] [review] should just be reverted.
Comment 7 Martin Pitt 2011-03-21 12:27:27 UTC
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
Comment 8 Martin Pitt 2011-03-21 14:35:13 UTC
So I guess the remainder of the original bug is a "won't fix" then.