Compilation Fails with Python 3.9
A Python module to control the GPIO on a Raspberry Pi
Brought to you by:
croston
Could not Compile or get it in any way to work on my raspi since Python update to 3.9
the problem seems to be ‘PyEval_ThreadsInitialized’ is deprecated [-Wdeprecated-declarations]
Trying to get it work with Python 3.7 on raspian gives me other Problems, my raspi update destroyed it. And I have no clue to get it working again.
:/usr/src/RPIGIO # python3 setup.py install
running install
running build
running build_py
running build_ext
building 'RPi._GPIO' extension
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/c_gpio.c -o build/temp.linux-armv7l-3.9/source/c_gpio.o
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/common.c -o build/temp.linux-armv7l-3.9/source/common.o
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/constants.c -o build/temp.linux-armv7l-3.9/source/constants.o
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/cpuinfo.c -o build/temp.linux-armv7l-3.9/source/cpuinfo.o
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/event_gpio.c -o build/temp.linux-armv7l-3.9/source/event_gpio.o
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/py_gpio.c -o build/temp.linux-armv7l-3.9/source/py_gpio.o
source/py_gpio.c: In function ‘PyInit__GPIO’:
source/py_gpio.c:1046:4: warning: ‘PyEval_ThreadsInitialized’ is deprecated [-Wdeprecated-declarations]
1046 | if (!PyEval_ThreadsInitialized())
| ^~
In file included from /usr/include/python3.9/Python.h:145,
from source/py_gpio.c:23:
/usr/include/python3.9/ceval.h:129:36: note: declared here
129 | Py_DEPRECATED(3.9) PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
source/py_gpio.c:1047:7: warning: ‘PyEval_InitThreads’ is deprecated [-Wdeprecated-declarations]
1047 | PyEval_InitThreads();
| ^~~~~~~~~~~~~~~~~~
In file included from /usr/include/python3.9/Python.h:145,
from source/py_gpio.c:23:
/usr/include/python3.9/ceval.h:130:37: note: declared here
130 | Py_DEPRECATED(3.9) PyAPI_FUNC(void) PyEval_InitThreads(void);
| ^~~~~~~~~~~~~~~~~~
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/py_pwm.c -o build/temp.linux-armv7l-3.9/source/py_pwm.o
arm-linux-gnueabihf-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/include/python3.9 -c source/soft_pwm.c -o build/temp.linux-armv7l-3.9/source/soft_pwm.o
arm-linux-gnueabihf-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -g -fwrapv -O2 -Wl,-z,relro -g -fwrapv -O2 -g -ffile-prefix-map=/python3.9-3.9.2=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-armv7l-3.9/source/c_gpio.o build/temp.linux-armv7l-3.9/source/common.o build/temp.linux-armv7l-3.9/source/constants.o build/temp.linux-armv7l-3.9/source/cpuinfo.o build/temp.linux-armv7l-3.9/source/event_gpio.o build/temp.linux-armv7l-3.9/source/py_gpio.o build/temp.linux-armv7l-3.9/source/py_pwm.o build/temp.linux-armv7l-3.9/source/soft_pwm.o -o build/lib.linux-armv7l-3.9/RPi/_GPIO.cpython-39-arm-linux-gnueabihf.so
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:41: multiple definition of `module_setup'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:41: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:40: multiple definition of `setup_error'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:40: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:39: multiple definition of `rpiinfo'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:39: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:38: multiple definition of `gpio_direction'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:38: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:37: multiple definition of `pin_to_gpio'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:37: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:36: multiple definition of `pin_to_gpio_rev3'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:36: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:35: multiple definition of `pin_to_gpio_rev2'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:35: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:34: multiple definition of `pin_to_gpio_rev1'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:34: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/common.h:33: multiple definition of `gpio_mode'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:33: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:33: multiple definition of `gpio_mode'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:33: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:40: multiple definition of `setup_error'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:40: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:39: multiple definition of `rpiinfo'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:39: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:38: multiple definition of `gpio_direction'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:38: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:41: multiple definition of `module_setup'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:41: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:37: multiple definition of `pin_to_gpio'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:37: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:36: multiple definition of `pin_to_gpio_rev3'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:36: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:34: multiple definition of `pin_to_gpio_rev1'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:34: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/common.h:35: multiple definition of `pin_to_gpio_rev2'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:35: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:42: multiple definition of `both_edge'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:42: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:41: multiple definition of `falling_edge'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:41: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:40: multiple definition of `rising_edge'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:40: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:39: multiple definition of `pud_down'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:39: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:38: multiple definition of `pud_up'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:38: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:37: multiple definition of `pud_off'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:37: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:36: multiple definition of `bcm'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:36: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:35: multiple definition of `board'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:35: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:34: multiple definition of `unknown'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:34: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:33: multiple definition of `spi'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:33: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:32: multiple definition of `i2c'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:32: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:31: multiple definition of `serial'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:31: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:30: multiple definition of `pwm'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:30: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:29: multiple definition of `output'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:29: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:28: multiple definition of `input'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:28: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:27: multiple definition of `low'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:27: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/constants.h:26: multiple definition of `high'; build/temp.linux-armv7l-3.9/source/constants.o:/usr/src/RPIGIO/source/constants.h:26: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:38: multiple definition of `gpio_direction'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:38: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/py_pwm.h:23: multiple definition of `PWMType'; build/temp.linux-armv7l-3.9/source/py_gpio.o:/usr/src/RPIGIO/source/py_pwm.h:23: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:41: multiple definition of `module_setup'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:41: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:40: multiple definition of `setup_error'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:40: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:39: multiple definition of `rpiinfo'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:39: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:37: multiple definition of `pin_to_gpio'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:37: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:36: multiple definition of `pin_to_gpio_rev3'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:36: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:35: multiple definition of `pin_to_gpio_rev2'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:35: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:34: multiple definition of `pin_to_gpio_rev1'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:34: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/py_pwm.o:/usr/src/RPIGIO/source/common.h:33: multiple definition of `gpio_mode'; build/temp.linux-armv7l-3.9/source/common.o:/usr/src/RPIGIO/source/common.h:33: first defined here
/usr/bin/ld: build/temp.linux-armv7l-3.9/source/soft_pwm.o:/usr/src/RPIGIO/source/soft_pwm.c:28: multiple definition of `threads'; build/temp.linux-armv7l-3.9/source/event_gpio.o:/usr/src/RPIGIO/source/event_gpio.c:60: first defined here
collect2: error: ld returned 1 exit status
error: command '/usr/bin/arm-linux-gnueabihf-gcc' failed with exit code 1
Solution found via https://pypi.org/project/RPi.GPIO/0.7.1a4/
Change Log :0.7.1a3
Fix PyEval_InitThreads deprecation warning for Python 3.9 (issue 188)
Installing latest Version worked:
pip3 install RPi.GPIO==0.7.1a4
--- could be closed ---
Last edit: Christian Krausse 2021-05-03
November now; Bullseye is released, with python 3.9 as default..
https://forums.raspberrypi.com/viewtopic.php?t=323289
Getting a non-alpha release out asap could be a good idea.
Agreed, would be great to promote this to a non alpha status as it was a bit freaky after dist-upgrade to fine rpi.GPIO wouldn't install, worked around with a pin to the alpha version, but would be great for folks to not have to do that.
This problem is caused by a change to the GCC 10 default options. I came across it while migrating my RaspberryPi's from Buster to the newly released Raspberry Pi OS BullsEye. Originally, the default was -fcommon but it has been changed to -fno-common. You can work around the problem by setting the CFLAGS environment variable. For example:
export CFLAGS=-fcommon
Alternatively, this problem can be fixed in source by changing setup.py as follows:
Fixed in 0.7.1
Fixed in 0.7.1