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