msg310583 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-01-24 10:27 |
Original bug report: https://bugzilla.redhat.com/show_bug.cgi?id=1537489
As soon as strict symbol checking was enabled on the development branch of Fedora, our build of CPython started failing due to undefined symbols when compiling ctypes.
Build log is attached.
That seems to be because ctypes are not explicitly linked against -ldl.
This can be fixed by adding the -ldl flag at https://github.com/python/cpython/blob/master/setup.py#L1935 , not sure though how portable that is.
|
msg310586 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-01-24 11:04 |
The attached file is 1.3 MB and your build is using Fedora-specific patches. Please post the relevant part from a vanilla build without Fedora patches.
|
msg310591 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-01-24 13:21 |
Relevant part from the build log:
running build_ext
building '_ctypes' extension
gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include -I. -IObjects -IInclude -IPython -I/usr/local/include -I/builddir/build/BUILD/Python-3.6.4/Include -I/builddir/build/BUILD/Python-3.6.4/build/optimized -c /builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.c -o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.o
gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include -I. -IObjects -IInclude -IPython -I/usr/local/include -I/builddir/build/BUILD/Python-3.6.4/Include -I/builddir/build/BUILD/Python-3.6.4/build/optimized -c /builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callbacks.c -o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callbacks.o
gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include -I. -IObjects -IInclude -IPython -I/usr/local/include -I/builddir/build/BUILD/Python-3.6.4/Include -I/builddir/build/BUILD/Python-3.6.4/build/optimized -c /builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c -o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.o
gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include -I. -IObjects -IInclude -IPython -I/usr/local/include -I/builddir/build/BUILD/Python-3.6.4/Include -I/builddir/build/BUILD/Python-3.6.4/build/optimized -c /builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/stgdict.c -o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/stgdict.o
gcc -pthread -Wno-unused-result -Wsign-compare -DDYNAMIC_ANNOTATIONS_ENABLED=1 -DNDEBUG -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -D_GNU_SOURCE -fPIC -fwrapv -fPIC -I/usr/include -I. -IObjects -IInclude -IPython -I/usr/local/include -I/builddir/build/BUILD/Python-3.6.4/Include -I/builddir/build/BUILD/Python-3.6.4/build/optimized -c /builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/cfield.c -o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/cfield.o
gcc -pthread -shared -Wl,-z,relro -Wl,-z,defs -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -g build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callbacks.o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/stgdict.o build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/cfield.o -L. -L/usr/local/lib64 -lffi -lpython3.6m -o build/lib.linux-x86_64-3.6/_ctypes.cpython-36m-x86_64-linux-gnu.so
build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.o: In function `PyCFuncPtr_FromDll':
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.c:3391: undefined reference to `dlsym'
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.c:3399: undefined reference to `dlerror'
build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.o: In function `CDataType_in_dll':
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.c:675: undefined reference to `dlsym'
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/_ctypes.c:683: undefined reference to `dlerror'
build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.o: In function `py_dl_open':
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c:1329: undefined reference to `dlopen'
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c:1332: undefined reference to `dlerror'
build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.o: In function `py_dl_sym':
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c:1366: undefined reference to `dlsym'
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c:1369: undefined reference to `dlerror'
build/temp.linux-x86_64-3.6/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.o: In function `py_dl_close':
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c:1348: undefined reference to `dlclose'
/builddir/build/BUILD/Python-3.6.4/Modules/_ctypes/callproc.c:1350: undefined reference to `dlerror'
collect2: error: ld returned 1 exit status
The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
atexit pwd time
Failed to build these modules:
_ctypes
|
msg310592 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-01-24 13:25 |
Unfortunately when trying to reproduce it by compiling from source and adding the '-z defs' flag to the linker, undefined symbol issues appeared for all the extension modules of the stdlib.
|
msg310595 - (view) |
Author: STINNER Victor (vstinner) * |
Date: 2018-01-24 14:13 |
I'm unable to reproduce the issue on Fedora 27 (binutils-2.29-6.fc27.src.rpm, gcc-7.2.1-2.fc27.src.rpm). _ctypes.cpython-37dm-x86_64-linux-gnu.so is generated whereas it's not linked to libdl.so (as expected). The flag seems to be ignored. https://src.fedoraproject.org/rpms/redhat-rpm-config/c/078af192613e1beec34824a94dc5f6feeeea1568?branch=master says "The latter needs binutils 2.29.1-12.fc28 or later. I understand that my binutils are too old (2.29 vs 2.29.1).
|
msg310596 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-01-24 14:16 |
-ldl is the correct fix here. https://fedoraproject.org/wiki/UnderstandingDSOLinkChange explains the problem. tl;dr linking with dl is required because the linker no longer adds indirect dependencies.
We can't just add dl unconditionally. You have to add a check.
|
msg310597 - (view) |
Author: STINNER Victor (vstinner) * |
Date: 2018-01-24 14:36 |
> We can't just add dl unconditionally.
dlopen() is not used on Windows nor macOS older than 10.3. On old macOS, functions like NSCreateObjectFileImageFromFile() are used.
I don't think that the master branch still supports macOS 10.2.
Mac OS X 10.2 was released in 2002 and unsupported as of 2006.
|
msg311664 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-02-05 12:12 |
So what would be the best way to proceed from here?
Add a check or just link to dl unconditionally?
|
msg311665 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-02-05 12:33 |
configure.ac already contains the check:
AC_CHECK_LIB(dl, dlopen)
It should be enough to add:
if sysconfig.get_config_var('HAVE_LIBDL'):
libs.append('dl')
to ctypes.
|
msg311676 - (view) |
Author: Stéphane Wirtel (matrixise) * |
Date: 2018-02-05 17:07 |
I use Fedora 27,
Please, could you give the instructions for your build, I could test locally and check if the patch fixes the issue.
Thank you
|
msg311677 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-02-05 17:09 |
Stéphane, the issue is only reproducible with latest Fedora rawhide.
|
msg311678 - (view) |
Author: Stéphane Wirtel (matrixise) * |
Date: 2018-02-05 17:32 |
maybe I miss something
but I have downloaded the last fedora:rawhide with docker, just update it via dnf update and install all the dependencies for git and python
docker --rm -it fedora:rawhide /bin/bash
dnf update
dnf install git-core
dnf builddep python3
git clone --depth=1 https://github.com/python/cpython
cd cpython
./configure && make
and I have no issue with ctypes.
What are your instructions for the build?
Thank you
|
msg311722 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-02-06 09:57 |
@Stephane,
Currently the flag has been disabled on rawhide due to too many breakages but the bug is still there if you add '-z defs' to the linker flags.
More info:
https://src.fedoraproject.org/rpms/redhat-rpm-config/c/8d6c6d0761089dfb7e1eacf35112b3d7a3f0d1af?branch=master
|
msg311726 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-02-06 15:33 |
Just tested it for python3 on a rawhide system with the flag enabled and it works, ctypes is compiled successfully.
python2 is not affected the same way though, various modules fail there with different undefined references issues when setting the flag.
|
msg311727 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-02-06 15:36 |
Attaching the build log from python2. Near the end you can see the undefined references errors.
|
msg312790 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-02-25 09:22 |
New changeset 5bb9692575f10f4a7c7f1c2c0c70956baf6d5c23 by Christian Heimes in branch 'master':
bpo-32647: Link ctypes extension with libdl. (#5550)
https://github.com/python/cpython/commit/5bb9692575f10f4a7c7f1c2c0c70956baf6d5c23
|
msg312802 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-02-25 11:31 |
New changeset 4bb9b9aea04b1a96632da1b30a58fb31cbe6ec92 by Christian Heimes in branch '2.7':
[2.7] bpo-32647: Link ctypes extension with libdl. (GH-5550) (#5877)
https://github.com/python/cpython/commit/4bb9b9aea04b1a96632da1b30a58fb31cbe6ec92
|
msg312805 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-02-25 12:07 |
New changeset 4cb373359d5ff29b222b10207516d294f3a54ad8 by Christian Heimes (Miss Islington (bot)) in branch '3.7':
[3.7] bpo-32647: Link ctypes extension with libdl. (GH-5550) (#5874)
https://github.com/python/cpython/commit/4cb373359d5ff29b222b10207516d294f3a54ad8
|
msg312806 - (view) |
Author: Christian Heimes (christian.heimes) * |
Date: 2018-02-25 12:07 |
New changeset 192bff4e2d196b8933829923ca1db77d8dee67e2 by Christian Heimes (Miss Islington (bot)) in branch '3.6':
[3.6] bpo-32647: Link ctypes extension with libdl. (GH-5550) (#5875)
https://github.com/python/cpython/commit/192bff4e2d196b8933829923ca1db77d8dee67e2
|
msg312938 - (view) |
Author: Charalampos Stratakis (cstratak) * |
Date: 2018-02-26 17:17 |
Tested the fix and ctypes is linked successfully with libdl when utilizing the strict symbol check.
|
|
Date |
User |
Action |
Args |
2022-04-11 14:58:57 | admin | set | github: 76828 |
2018-02-26 17:17:49 | cstratak | set | status: open -> closed
messages:
+ msg312938 stage: patch review -> resolved |
2018-02-25 12:07:38 | christian.heimes | set | messages:
+ msg312806 |
2018-02-25 12:07:26 | christian.heimes | set | messages:
+ msg312805 |
2018-02-25 11:31:20 | christian.heimes | set | messages:
+ msg312802 |
2018-02-25 10:02:49 | christian.heimes | set | pull_requests:
+ pull_request5650 |
2018-02-25 09:23:23 | miss-islington | set | pull_requests:
+ pull_request5648 |
2018-02-25 09:22:22 | miss-islington | set | pull_requests:
+ pull_request5647 |
2018-02-25 09:22:16 | christian.heimes | set | messages:
+ msg312790 |
2018-02-06 15:36:18 | cstratak | set | files:
+ py2buildlog
messages:
+ msg311727 |
2018-02-06 15:33:39 | cstratak | set | messages:
+ msg311726 |
2018-02-06 09:57:00 | cstratak | set | messages:
+ msg311722 |
2018-02-05 17:32:53 | matrixise | set | messages:
+ msg311678 |
2018-02-05 17:09:42 | christian.heimes | set | messages:
+ msg311677 |
2018-02-05 17:07:12 | matrixise | set | nosy:
+ matrixise messages:
+ msg311676
|
2018-02-05 12:33:55 | christian.heimes | set | type: compile error messages:
+ msg311665 versions:
+ Python 3.8 |
2018-02-05 12:33:28 | christian.heimes | set | keywords:
+ patch stage: patch review pull_requests:
+ pull_request5375 |
2018-02-05 12:12:16 | cstratak | set | messages:
+ msg311664 |
2018-01-24 14:36:04 | vstinner | set | messages:
+ msg310597 |
2018-01-24 14:16:58 | christian.heimes | set | messages:
+ msg310596 |
2018-01-24 14:13:18 | vstinner | set | nosy:
+ vstinner title: Undefined references when compiling ctypes -> Undefined references when compiling ctypes on binutils 2.29.1 with gcc -Wl,-z,undefs (Fedora 28) messages:
+ msg310595
versions:
+ Python 2.7, - Python 3.8 |
2018-01-24 13:25:31 | cstratak | set | messages:
+ msg310592 components:
+ Extension Modules |
2018-01-24 13:21:39 | cstratak | set | messages:
+ msg310591 |
2018-01-24 11:04:43 | christian.heimes | set | nosy:
+ christian.heimes messages:
+ msg310586
|
2018-01-24 10:27:35 | cstratak | set | components:
+ Build |
2018-01-24 10:27:29 | cstratak | create | |