pyFLAC icon indicating copy to clipboard operation
pyFLAC copied to clipboard

Illegal Instruction

Open triggerfinger-debug opened this issue 3 years ago • 5 comments

Hello, I am trying to use pyflac on raspberry pi zero, but I am getting Illegal instruction error.

Collecting pyflac
  Downloading https://files.pythonhosted.org/packages/21/ec/621fd90f1b98477fa1c147edab0ea54cb8bd4b34773f698d5da665a197f3/pyFLAC-2.0.0.tar.gz (1.8MB)
     |████████████████████████████████| 1.8MB 1.0MB/s
Requirement already satisfied: cffi>=1.4.0 in /home/pi/.local/lib/python3.8/site-packages (from pyflac) (1.15.0)
Collecting SoundFile>=0.8.0 (from pyflac)
  Downloading https://files.pythonhosted.org/packages/eb/f2/3cbbbf3b96fb9fa91582c438b574cff3f45b29c772f94c400e2c99ef5db9/SoundFile-0.10.3.post1-py2.py3-none-any.whl
Requirement already satisfied: numpy in /home/pi/.local/lib/python3.8/site-packages (from pyflac) (1.22.4)
Requirement already satisfied: pycparser in /home/pi/.local/lib/python3.8/site-packages (from cffi>=1.4.0->pyflac) (2.21)
Building wheels for collected packages: pyflac
  Building wheel for pyflac (setup.py) ... done
  Created wheel for pyflac: filename=pyFLAC-2.0.0-cp38-cp38-linux_armv6l.whl size=1938080 sha256=30e340d066abeca1358fca4f26c1f82151e68ece9a1880f5345360b523eecd3b
  Stored in directory: /home/pi/.cache/pip/wheels/5a/96/19/863b328487fa805e47b53d7da91885d99770ceae1af630e38e
Successfully built pyflac
Installing collected packages: SoundFile, pyflac
Successfully installed SoundFile-0.10.3.post1 pyflac-2.0.0
Python 3.8.1 (default, May 25 2022, 20:18:49)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import soundfile
>>> import pyflac
Illegal instruction

triggerfinger-debug avatar Jun 06 '22 17:06 triggerfinger-debug

Hey, thanks for the bug report. I am hoping to have fixed this issue in this PR - https://github.com/sonos/pyFLAC/pull/14.

Would you be able to be a beta tester for me, and install with the command below then retry your test above?

pip3 install git+https://github.com/sonos/pyFLAC.git@feature/arm64-build

joetoddsonos avatar Jun 22 '22 12:06 joetoddsonos

Absolutely. First had to find my wifi dongle.

Here is the outputs with the new command:

Collecting git+https://github.com/sonos/pyFLAC.git@feature/arm64-build
  Cloning https://github.com/sonos/pyFLAC.git (to revision feature/arm64-build) to /tmp/pip-req-build-c63lvjo2
  Running command git clone -q https://github.com/sonos/pyFLAC.git /tmp/pip-req-build-c63lvjo2
  Running command git checkout -b feature/arm64-build --track origin/feature/arm64-build
  Switched to a new branch 'feature/arm64-build'
  Branch 'feature/arm64-build' set up to track remote branch 'feature/arm64-build' from 'origin'.
Requirement already satisfied: cffi>=1.4.0 in ./.local/lib/python3.8/site-packages (from pyFLAC==2.1.0) (1.15.0)
Requirement already satisfied: numpy>=1.21 in ./.local/lib/python3.8/site-packages (from pyFLAC==2.1.0) (1.22.4)
Collecting SoundFile>=0.8.0 (from pyFLAC==2.1.0)
  Using cached https://files.pythonhosted.org/packages/eb/f2/3cbbbf3b96fb9fa91582c438b574cff3f45b29c772f94c400e2c99ef5db9/SoundFile-0.10.3.post1-py2.py3-none-any.whl
Requirement already satisfied: pycparser in ./.local/lib/python3.8/site-packages (from cffi>=1.4.0->pyFLAC==2.1.0) (2.21)
Building wheels for collected packages: pyFLAC
  Building wheel for pyFLAC (setup.py) ... done
  Created wheel for pyFLAC: filename=pyFLAC-2.1.0-cp38-cp38-linux_armv6l.whl size=2003437 sha256=f08550fc6a94935e61a20e43e27ae5ccfa30add72ea1c93a2fbfcbe160b7686d
  Stored in directory: /tmp/pip-ephem-wheel-cache-zglna2vq/wheels/d2/a5/5f/4c39fe97c8c74d98401061fc88c9ba2e5544b978c6c0b49fa5
Successfully built pyFLAC
Installing collected packages: SoundFile, pyFLAC
Successfully installed SoundFile-0.10.3.post1 pyFLAC-2.1.0

However:

Python 3.8.1 (default, May 25 2022, 20:18:49)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import soundfile
>>> import pyflac
Illegal instruction

triggerfinger-debug avatar Jun 22 '22 13:06 triggerfinger-debug

Also tried building the wheel, and same "Illegal instruction":

python3.8 setup.py build
running build
running build_py
creating build
creating build/lib.linux-armv6l-3.8
creating build/lib.linux-armv6l-3.8/pyflac
copying pyflac/decoder.py -> build/lib.linux-armv6l-3.8/pyflac
copying pyflac/__init__.py -> build/lib.linux-armv6l-3.8/pyflac
copying pyflac/__main__.py -> build/lib.linux-armv6l-3.8/pyflac
copying pyflac/encoder.py -> build/lib.linux-armv6l-3.8/pyflac
creating build/lib.linux-armv6l-3.8/tests
copying tests/test_encoder.py -> build/lib.linux-armv6l-3.8/tests
copying tests/__init__.py -> build/lib.linux-armv6l-3.8/tests
copying tests/test_decoder.py -> build/lib.linux-armv6l-3.8/tests
running egg_info
creating pyFLAC.egg-info
writing pyFLAC.egg-info/PKG-INFO
writing dependency_links to pyFLAC.egg-info/dependency_links.txt
writing entry points to pyFLAC.egg-info/entry_points.txt
writing requirements to pyFLAC.egg-info/requires.txt
writing top-level names to pyFLAC.egg-info/top_level.txt
writing manifest file 'pyFLAC.egg-info/SOURCES.txt'
reading manifest file 'pyFLAC.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pyFLAC.egg-info/SOURCES.txt'
creating build/lib.linux-armv6l-3.8/pyflac/builder
copying pyflac/builder/build_args.py -> build/lib.linux-armv6l-3.8/pyflac/builder
copying pyflac/builder/decoder.py -> build/lib.linux-armv6l-3.8/pyflac/builder
copying pyflac/builder/encoder.py -> build/lib.linux-armv6l-3.8/pyflac/builder
creating build/lib.linux-armv6l-3.8/pyflac/include
creating build/lib.linux-armv6l-3.8/pyflac/include/FLAC
copying pyflac/include/FLAC/export.h -> build/lib.linux-armv6l-3.8/pyflac/include/FLAC
copying pyflac/include/FLAC/format.h -> build/lib.linux-armv6l-3.8/pyflac/include/FLAC
copying pyflac/include/FLAC/ordinals.h -> build/lib.linux-armv6l-3.8/pyflac/include/FLAC
copying pyflac/include/FLAC/stream_decoder.h -> build/lib.linux-armv6l-3.8/pyflac/include/FLAC
copying pyflac/include/FLAC/stream_encoder.h -> build/lib.linux-armv6l-3.8/pyflac/include/FLAC
creating build/lib.linux-armv6l-3.8/pyflac/libraries
copying pyflac/libraries/LICENSE -> build/lib.linux-armv6l-3.8/pyflac/libraries
creating build/lib.linux-armv6l-3.8/pyflac/libraries/darwin-x86_64
copying pyflac/libraries/darwin-x86_64/libFLAC.8.dylib -> build/lib.linux-armv6l-3.8/pyflac/libraries/darwin-x86_64
creating build/lib.linux-armv6l-3.8/pyflac/libraries/linux-x86_64
copying pyflac/libraries/linux-x86_64/libFLAC-8.3.0.so -> build/lib.linux-armv6l-3.8/pyflac/libraries/linux-x86_64
creating build/lib.linux-armv6l-3.8/pyflac/libraries/raspbian-armv6z
copying pyflac/libraries/raspbian-armv6z/libFLAC-8.3.0.so -> build/lib.linux-armv6l-3.8/pyflac/libraries/raspbian-armv6z
creating build/lib.linux-armv6l-3.8/pyflac/libraries/raspbian-armv7a
copying pyflac/libraries/raspbian-armv7a/libFLAC-8.3.0.so -> build/lib.linux-armv6l-3.8/pyflac/libraries/raspbian-armv7a
creating build/lib.linux-armv6l-3.8/pyflac/libraries/windows-i686
copying pyflac/libraries/windows-i686/FLAC-8.lib -> build/lib.linux-armv6l-3.8/pyflac/libraries/windows-i686
copying pyflac/libraries/windows-i686/libFLAC-8.dll -> build/lib.linux-armv6l-3.8/pyflac/libraries/windows-i686
creating build/lib.linux-armv6l-3.8/pyflac/libraries/windows-x86_64
copying pyflac/libraries/windows-x86_64/FLAC-8.lib -> build/lib.linux-armv6l-3.8/pyflac/libraries/windows-x86_64
copying pyflac/libraries/windows-x86_64/libFLAC-8.dll -> build/lib.linux-armv6l-3.8/pyflac/libraries/windows-x86_64
creating build/lib.linux-armv6l-3.8/tests/data
copying tests/data/8bit.flac -> build/lib.linux-armv6l-3.8/tests/data
copying tests/data/mono.flac -> build/lib.linux-armv6l-3.8/tests/data
copying tests/data/mono.wav -> build/lib.linux-armv6l-3.8/tests/data
copying tests/data/stereo.flac -> build/lib.linux-armv6l-3.8/tests/data
copying tests/data/stereo.wav -> build/lib.linux-armv6l-3.8/tests/data
copying tests/data/surround.flac -> build/lib.linux-armv6l-3.8/tests/data
copying tests/data/surround.wav -> build/lib.linux-armv6l-3.8/tests/data
running build_ext
generating cffi module 'build/temp.linux-armv6l-3.8/pyflac._decoder.c'
creating build/temp.linux-armv6l-3.8
generating cffi module 'build/temp.linux-armv6l-3.8/pyflac._encoder.c'
building 'pyflac._encoder' extension
creating build/temp.linux-armv6l-3.8/build
creating build/temp.linux-armv6l-3.8/build/temp.linux-armv6l-3.8
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I./pyflac/include -I/usr/local/include/python3.8 -c build/temp.linux-armv6l-3.8/pyflac._encoder.c -o build/temp.linux-armv6l-3.8/build/temp.linux-armv6l-3.8/pyflac._encoder.o
gcc -pthread -shared build/temp.linux-armv6l-3.8/build/temp.linux-armv6l-3.8/pyflac._encoder.o -L/home/pi/pyFLAC/pyflac/libraries/raspbian-armv6z -lFLAC-8.3.0 -o build/lib.linux-armv6l-3.8/pyflac/_encoder.abi3.so -Wl,-rpath,$ORIGIN/libraries/raspbian-armv6z
building 'pyflac._decoder' extension
gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fPIC -I./pyflac/include -I/usr/local/include/python3.8 -c build/temp.linux-armv6l-3.8/pyflac._decoder.c -o build/temp.linux-armv6l-3.8/build/temp.linux-armv6l-3.8/pyflac._decoder.o
gcc -pthread -shared build/temp.linux-armv6l-3.8/build/temp.linux-armv6l-3.8/pyflac._decoder.o -L/home/pi/pyFLAC/pyflac/libraries/raspbian-armv6z -lFLAC-8.3.0 -o build/lib.linux-armv6l-3.8/pyflac/_decoder.abi3.so -Wl,-rpath,$ORIGIN/libraries/raspbian-armv6z

Followed by:

python3.8 setup.py bdist_wheel
running bdist_wheel
running build
running build_py
running egg_info
writing pyFLAC.egg-info/PKG-INFO
writing dependency_links to pyFLAC.egg-info/dependency_links.txt
writing entry points to pyFLAC.egg-info/entry_points.txt
writing requirements to pyFLAC.egg-info/requires.txt
writing top-level names to pyFLAC.egg-info/top_level.txt
reading manifest file 'pyFLAC.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'pyFLAC.egg-info/SOURCES.txt'
running build_ext
generating cffi module 'build/temp.linux-armv6l-3.8/pyflac._decoder.c'
already up-to-date
generating cffi module 'build/temp.linux-armv6l-3.8/pyflac._encoder.c'
already up-to-date
installing to build/bdist.linux-armv6l/wheel
running install
running install_lib
creating build/bdist.linux-armv6l
creating build/bdist.linux-armv6l/wheel
creating build/bdist.linux-armv6l/wheel/pyflac
creating build/bdist.linux-armv6l/wheel/pyflac/builder
copying build/lib.linux-armv6l-3.8/pyflac/builder/decoder.py -> build/bdist.linux-armv6l/wheel/pyflac/builder
copying build/lib.linux-armv6l-3.8/pyflac/builder/build_args.py -> build/bdist.linux-armv6l/wheel/pyflac/builder
copying build/lib.linux-armv6l-3.8/pyflac/builder/encoder.py -> build/bdist.linux-armv6l/wheel/pyflac/builder
copying build/lib.linux-armv6l-3.8/pyflac/decoder.py -> build/bdist.linux-armv6l/wheel/pyflac
creating build/bdist.linux-armv6l/wheel/pyflac/libraries
creating build/bdist.linux-armv6l/wheel/pyflac/libraries/darwin-x86_64
copying build/lib.linux-armv6l-3.8/pyflac/libraries/darwin-x86_64/libFLAC.8.dylib -> build/bdist.linux-armv6l/wheel/pyflac/libraries/darwin-x86_64
copying build/lib.linux-armv6l-3.8/pyflac/libraries/LICENSE -> build/bdist.linux-armv6l/wheel/pyflac/libraries
creating build/bdist.linux-armv6l/wheel/pyflac/libraries/windows-x86_64
copying build/lib.linux-armv6l-3.8/pyflac/libraries/windows-x86_64/libFLAC-8.dll -> build/bdist.linux-armv6l/wheel/pyflac/libraries/windows-x86_64
copying build/lib.linux-armv6l-3.8/pyflac/libraries/windows-x86_64/FLAC-8.lib -> build/bdist.linux-armv6l/wheel/pyflac/libraries/windows-x86_64
creating build/bdist.linux-armv6l/wheel/pyflac/libraries/windows-i686
copying build/lib.linux-armv6l-3.8/pyflac/libraries/windows-i686/libFLAC-8.dll -> build/bdist.linux-armv6l/wheel/pyflac/libraries/windows-i686
copying build/lib.linux-armv6l-3.8/pyflac/libraries/windows-i686/FLAC-8.lib -> build/bdist.linux-armv6l/wheel/pyflac/libraries/windows-i686
creating build/bdist.linux-armv6l/wheel/pyflac/libraries/raspbian-armv7a
copying build/lib.linux-armv6l-3.8/pyflac/libraries/raspbian-armv7a/libFLAC-8.3.0.so -> build/bdist.linux-armv6l/wheel/pyflac/libraries/raspbian-armv7a
creating build/bdist.linux-armv6l/wheel/pyflac/libraries/raspbian-armv6z
copying build/lib.linux-armv6l-3.8/pyflac/libraries/raspbian-armv6z/libFLAC-8.3.0.so -> build/bdist.linux-armv6l/wheel/pyflac/libraries/raspbian-armv6z
creating build/bdist.linux-armv6l/wheel/pyflac/libraries/linux-x86_64
copying build/lib.linux-armv6l-3.8/pyflac/libraries/linux-x86_64/libFLAC-8.3.0.so -> build/bdist.linux-armv6l/wheel/pyflac/libraries/linux-x86_64
copying build/lib.linux-armv6l-3.8/pyflac/_encoder.abi3.so -> build/bdist.linux-armv6l/wheel/pyflac
copying build/lib.linux-armv6l-3.8/pyflac/_decoder.abi3.so -> build/bdist.linux-armv6l/wheel/pyflac
creating build/bdist.linux-armv6l/wheel/pyflac/include
creating build/bdist.linux-armv6l/wheel/pyflac/include/FLAC
copying build/lib.linux-armv6l-3.8/pyflac/include/FLAC/stream_decoder.h -> build/bdist.linux-armv6l/wheel/pyflac/include/FLAC
copying build/lib.linux-armv6l-3.8/pyflac/include/FLAC/format.h -> build/bdist.linux-armv6l/wheel/pyflac/include/FLAC
copying build/lib.linux-armv6l-3.8/pyflac/include/FLAC/stream_encoder.h -> build/bdist.linux-armv6l/wheel/pyflac/include/FLAC
copying build/lib.linux-armv6l-3.8/pyflac/include/FLAC/export.h -> build/bdist.linux-armv6l/wheel/pyflac/include/FLAC
copying build/lib.linux-armv6l-3.8/pyflac/include/FLAC/ordinals.h -> build/bdist.linux-armv6l/wheel/pyflac/include/FLAC
copying build/lib.linux-armv6l-3.8/pyflac/__init__.py -> build/bdist.linux-armv6l/wheel/pyflac
copying build/lib.linux-armv6l-3.8/pyflac/__main__.py -> build/bdist.linux-armv6l/wheel/pyflac
copying build/lib.linux-armv6l-3.8/pyflac/encoder.py -> build/bdist.linux-armv6l/wheel/pyflac
creating build/bdist.linux-armv6l/wheel/tests
creating build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/surround.wav -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/8bit.flac -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/mono.wav -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/mono.flac -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/stereo.wav -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/stereo.flac -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/data/surround.flac -> build/bdist.linux-armv6l/wheel/tests/data
copying build/lib.linux-armv6l-3.8/tests/test_encoder.py -> build/bdist.linux-armv6l/wheel/tests
copying build/lib.linux-armv6l-3.8/tests/__init__.py -> build/bdist.linux-armv6l/wheel/tests
copying build/lib.linux-armv6l-3.8/tests/test_decoder.py -> build/bdist.linux-armv6l/wheel/tests
running install_egg_info
Copying pyFLAC.egg-info to build/bdist.linux-armv6l/wheel/pyFLAC-2.0.0-py3.8.egg-info
running install_scripts
adding license file "LICENSE.txt" (matched pattern "LICEN[CS]E*")
creating build/bdist.linux-armv6l/wheel/pyFLAC-2.0.0.dist-info/WHEEL
creating 'dist/pyFLAC-2.0.0-cp38-cp38-linux_armv6l.whl' and adding 'build/bdist.linux-armv6l/wheel' to it
adding 'pyflac/__init__.py'
adding 'pyflac/__main__.py'
adding 'pyflac/_decoder.abi3.so'
adding 'pyflac/_encoder.abi3.so'
adding 'pyflac/decoder.py'
adding 'pyflac/encoder.py'
adding 'pyflac/builder/build_args.py'
adding 'pyflac/builder/decoder.py'
adding 'pyflac/builder/encoder.py'
adding 'pyflac/include/FLAC/export.h'
adding 'pyflac/include/FLAC/format.h'
adding 'pyflac/include/FLAC/ordinals.h'
adding 'pyflac/include/FLAC/stream_decoder.h'
adding 'pyflac/include/FLAC/stream_encoder.h'
adding 'pyflac/libraries/LICENSE'
adding 'pyflac/libraries/darwin-x86_64/libFLAC.8.dylib'
adding 'pyflac/libraries/linux-x86_64/libFLAC-8.3.0.so'
adding 'pyflac/libraries/raspbian-armv6z/libFLAC-8.3.0.so'
adding 'pyflac/libraries/raspbian-armv7a/libFLAC-8.3.0.so'
adding 'pyflac/libraries/windows-i686/FLAC-8.lib'
adding 'pyflac/libraries/windows-i686/libFLAC-8.dll'
adding 'pyflac/libraries/windows-x86_64/FLAC-8.lib'
adding 'pyflac/libraries/windows-x86_64/libFLAC-8.dll'
adding 'tests/__init__.py'
adding 'tests/test_decoder.py'
adding 'tests/test_encoder.py'
adding 'tests/data/8bit.flac'
adding 'tests/data/mono.flac'
adding 'tests/data/mono.wav'
adding 'tests/data/stereo.flac'
adding 'tests/data/stereo.wav'
adding 'tests/data/surround.flac'
adding 'tests/data/surround.wav'
adding 'pyFLAC-2.0.0.dist-info/LICENSE.txt'
adding 'pyFLAC-2.0.0.dist-info/METADATA'
adding 'pyFLAC-2.0.0.dist-info/WHEEL'
adding 'pyFLAC-2.0.0.dist-info/entry_points.txt'
adding 'pyFLAC-2.0.0.dist-info/top_level.txt'
adding 'pyFLAC-2.0.0.dist-info/RECORD'
removing build/bdist.linux-armv6l/wheel

triggerfinger-debug avatar Jun 22 '22 13:06 triggerfinger-debug

I think I got it working by replacing libFLAC-8.3.0.so with a copy from apt repository. It builds fine and I am able to import without problem.

triggerfinger-debug avatar Jun 22 '22 13:06 triggerfinger-debug

Thanks for your help, I think I will just use the apt repository build here as well.

joetoddsonos avatar Jun 30 '22 13:06 joetoddsonos