Description
- asyncpg version: asyncpg-0.21.0.dev0+7f5c2a2 (same for 0.20.1)
- PostgreSQL version: does not matter
- Do you use a PostgreSQL SaaS? If so, which? Can you reproduce
the issue with a local PostgreSQL install?: does not matter - Python version: 3.8.2 and 3.9.0a5+
- Platform: Fedora 32 x64/aarch64 and Alpine Linux 3.12 alpha x64/aarch64
- Do you use pgbouncer?: does not matter
- Did you install asyncpg with pip?: no
- If you built asyncpg locally, which version of Cython did you use?: 0.29.16 and 3.0a2
- Can the issue be reproduced under both asyncio and
uvloop?: does not matter
I have tested this on the following scenarios:
Fedora 32 x86_64, Python 3.8.2, GCC 10.0.1 20200328 (Red Hat 10.0.1-0.11) from official repos
Fedora 33 (rawhide) aarch64, Python 3.8.2, GCC 10.0.1 20200420 (Red Hat 10.0.1-0.12) from official repos
Alpine Linux 3.12 alpha x86_64, Python 3.9a5, GCC 10.0.1 20200427 from source (builds at https://ftp.travitia.xyz/alpine/x86_64/)
Alpine Linux 3.12 alpha aarch64, Python 3.9a5, GCC 10.0.1 20200426 from source (builds at https://ftp.travitia.xyz/alpine/aarch64/)
All have been tested twice with Cython 0.29.16 and Cython 3.0a2.
Whenever I compile asyncpg with GCC 9.3 on any of above scenarios, it compiles fine and runs fine.
Whenever I use GCC 10 in any of above scenarios, it does build fine, but importing it gives me:
>>> import asyncpg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/jens/.local/lib/python3.8/site-packages/asyncpg/__init__.py", line 8, in <module>
from .connection import connect, Connection # NOQA
File "/home/jens/.local/lib/python3.8/site-packages/asyncpg/connection.py", line 19, in <module>
from . import connect_utils
File "/home/jens/.local/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 28, in <module>
from . import protocol
File "/home/jens/.local/lib/python3.8/site-packages/asyncpg/protocol/__init__.py", line 8, in <module>
from .protocol import Protocol, Record, NO_TIMEOUT # NOQA
File "asyncpg/protocol/protocol.pyx", line 1, in init asyncpg.protocol.protocol
ImportError: /home/jens/.local/lib/python3.8/site-packages/asyncpg/pgproto/pgproto.cpython-38-x86_64-linux-gnu.so: undefined symbol: uuid_to_hex
This is weird, as readelf shows:
$ readelf -a /home/jens/.local/lib/python3.8/site-packages/asyncpg/pgproto/pgproto.cpython-38-x86_64-linux-gnu.so | grep uuid_to_hex
000000055d90 004f00000007 R_X86_64_JUMP_SLO 0000000000000000 uuid_to_hex + 0
79: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND uuid_to_hex
1176: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND uuid_to_hex
I don't know C much, but I have seen that uuid_to_hex is defined in the code for pgproto, so I have no clue how this happens.
FYI: On all scenarios, I am able to compile and use uvloop and cpython 3.9 without any errors.
EDIT: Same issue with Alpine Linux 3.12 alpha, Python 3.9a6, Cython 3.0a3 and GCC 10 20200430