L'erreur suivante se produit lors de la compilation de psutil avec MUSL. Une idée?
/home/user/Documents/versioned/buildroot/bsp/host/usr/bin/x86_64-linux-gcc -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Os -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -DPSUTIL_VERSION=431 -I/home/user/Documents/versioned/buildroot/bsp/host/usr/x86_64-buildroot-linux-musl/sysroot/usr/include/python2.7 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o
In file included from /home/user/Documents/versioned/buildroot/bsp/host/usr/x86_64-buildroot-linux-musl/sysroot/usr/include/linux/kernel.h:4:0,
from /home/user/Documents/versioned/buildroot/bsp/host/usr/x86_64-buildroot-linux-musl/sysroot/usr/include/linux/ethtool.h:16,
from psutil/_psutil_linux.c:35:
/home/user/Documents/versioned/buildroot/bsp/host/usr/x86_64-buildroot-linux-musl/sysroot/usr/include/linux/sysinfo.h:7:8: error: redefinition of ‘struct sysinfo’
struct sysinfo {
^
In file included from psutil/_psutil_linux.c:21:0:
/home/user/Documents/versioned/buildroot/bsp/host/usr/x86_64-buildroot-linux-musl/sysroot/usr/include/sys/sysinfo.h:10:8: note: originally defined here
struct sysinfo {
^
psutil/_psutil_linux.c: In function ‘psutil_linux_sysinfo’:
psutil/_psutil_linux.c:244:17: warning: passing argument 1 of ‘sysinfo’ from incompatible pointer type
if (sysinfo(&info) != 0)
^
In file included from psutil/_psutil_linux.c:21:0:
/home/user/Documents/versioned/buildroot/bsp/host/usr/x86_64-buildroot-linux-musl/sysroot/usr/include/sys/sysinfo.h:26:5: note: expected ‘struct sysinfo *’ but argument is of type ‘struct sysinfo *’
int sysinfo (struct sysinfo *);
^
psutil/_psutil_linux.c: In function ‘init_psutil_linux’:
psutil/_psutil_linux.c:644:15: warning: unused variable ‘v’ [-Wunused-variable]
PyObject *v;
^
error: command '/home/user/Documents/versioned/buildroot/bsp/host/usr/bin/x86_64-linux-gcc' failed with exit status 1
Qu'est-ce que MUSL?
Le 18 août 2016 à 12 h 37, "Yegor Yefremov" [email protected] a écrit:
L'erreur suivante se produit lors de la compilation de psutil avec MUSL. Une idée?
/ home / user / Documents / versionné / buildroot / bsp / host / usr / bin / x86_64-linux-gcc
-fno-strict-aliasing -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE
-D_FILE_OFFSET_BITS = 64 -Os -DNDEBUG -g -fwrapv -O3 -Wall
-Wstrict-prototypes -fPIC -DPSUTIL_VERSION = 431 -I / home / utilisateur / Documents /
versionné / buildroot / bsp / host / usr / x86_64-buildroot-linux-
musl / sysroot / usr / include / python2.7 -c psutil / _psutil_linux.c -o
build / temp.linux-x86_64-2.7 / psutil / _psutil_linux.o
Dans le fichier inclus de / home / user / Documents / versionné / buildroot / bsp / host /
usr / x86_64-buildroot-linux-musl / sysroot / usr / include / linux / kernel.h: 4: 0,
depuis / home / user / Documents / versionné / buildroot / bsp / host /
usr / x86_64-buildroot-linux-musl / sysroot / usr / include / linux / ethtool.h: 16,
depuis psutil / _psutil_linux.c: 35:
/ home / utilisateur / Documents / versionné / buildroot / bsp / host /
usr / x86_64-buildroot-linux-musl / sysroot / usr / include / linux / sysinfo.h: 7: 8:
erreur: redéfinition de 'struct sysinfo'
struct sysinfo {
^
Dans le fichier inclus depuis psutil / _psutil_linux.c: 21: 0:
/ home / utilisateur / Documents / versionné / buildroot / bsp / host /
usr / x86_64-buildroot-linux-musl / sysroot / usr / include / sys / sysinfo.h: 10: 8:
note: défini à l'origine ici
struct sysinfo {
^
psutil / _psutil_linux.c: Dans la fonction 'psutil_linux_sysinfo':
psutil / _psutil_linux.c: 244: 17: avertissement: passage de l'argument 1 de 'sysinfo'
à partir d'un type de pointeur incompatible
si (sysinfo (& info)! = 0)
^
Dans le fichier inclus depuis psutil / _psutil_linux.c: 21: 0:
/ home / utilisateur / Documents / versionné / buildroot / bsp / host /
usr / x86_64-buildroot-linux-musl / sysroot / usr / include / sys / sysinfo.h: 26: 5:
note: attendue 'struct sysinfo *' mais l'argument est de type 'struct sysinfo *'
int sysinfo (struct sysinfo *);
^
psutil / _psutil_linux.c: Dans la fonction 'init_psutil_linux':
psutil / _psutil_linux.c: 644: 15: avertissement: variable inutilisée 'v'
[-Wunused-variable]
PyObject * v;
^
erreur: commande '/ home / utilisateur / Documents / versionné / buildroot / bsp / host / usr / bin / x86_64-linux-gcc'
échoué avec l'état de sortie 1-
Vous recevez ceci parce que vous êtes abonné à ce fil.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/giampaolo/psutil/issues/872 , ou coupez le fil
https://github.com/notifications/unsubscribe-auth/AAplLFXcm6IbMvfDbxQf8-erdd6d3GToks5qhDXngaJpZM4JnW6d
.
@giampaolo MUSL est une nouvelle bibliothèque C , qui essaie de suivre strictement les standards (POSIX etc.). Ces règles conduisent souvent à des problèmes de compilation, lorsque des en-têtes non standard seront inclus, etc. MUSL est par exemple une bibliothèque C quasi standard pour les projets OpenWrt / LEDE.
Dans le cas de psutil, il y a un problème de restes de glibc avec struct sysinfo. Il est défini dans linux / sysinfo.h et dans sys / sysinfo.h. Le projet OpenWrt fournit le correctif suivant pour l'en-tête du noyau, mais cela n'est pas applicable pour psutil bien sûr. Si je supprime #include
psutil / _psutil_linux.c: Dans la fonction 'psutil_linux_sysinfo':
psutil / _psutil_linux.c: 244: 5: avertissement: déclaration implicite de la fonction 'sysinfo' [-Wimplicit-function-declaration]
si (sysinfo (& info)! = 0)
Donc je ne sais pas si c'est une bonne solution.
Voici ma sortie sur Alpine Linux, en utilisant MUSL
# pip install psutil
Collecting psutil
Using cached psutil-4.4.1.tar.gz
Installing collected packages: psutil
Running setup.py install for psutil ... error
Complete output from command /usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-s1iYoK/psutil/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-d3266X-record/install-record.txt --single-version-externally-managed --compile:
/tmp/tmpp7WhDB.c:1:27: fatal error: linux/ethtool.h: No such file or directory
#include <linux/ethtool.h>
^
compilation terminated.
running install
running build
running build_py
creating build
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/psutil
copying psutil/_psposix.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_psosx.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/__init__.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_pssunos.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_pswindows.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_psbsd.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_pslinux.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_compat.py -> build/lib.linux-x86_64-2.7/psutil
copying psutil/_common.py -> build/lib.linux-x86_64-2.7/psutil
creating build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_bsd.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_windows.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/__init__.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_misc.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/runner.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_linux.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_system.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_osx.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_posix.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_sunos.py -> build/lib.linux-x86_64-2.7/psutil/tests
copying psutil/tests/test_process.py -> build/lib.linux-x86_64-2.7/psutil/tests
running build_ext
building 'psutil._psutil_linux' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/psutil
gcc -fno-strict-aliasing -Os -fomit-frame-pointer -g -DNDEBUG -Os -fomit-frame-pointer -g -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=441 -DPSUTIL_LINUX=1 -DPSUTIL_ETHTOOL_MISSING_TYPES=1 -I/usr/include/python2.7 -c psutil/_psutil_linux.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_linux.o
psutil/_psutil_linux.c:19:27: fatal error: linux/version.h: No such file or directory
#include <linux/version.h>
^
compilation terminated.
error: command 'gcc' failed with exit status 1
----------------------------------------
Command "/usr/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-s1iYoK/psutil/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-d3266X-record/install-record.txt --single-version-externally-managed --compile" failed with error code 1 in /tmp/pip-build-s1iYoK/psutil/
bump obtient le même problème avec Alpine Linux: 3.4.
Veuillez fournir des instructions sur la façon de construire / compiler psutil en utilisant MUSL sous Linux (je suis sous Ubuntu).
J'ai une solution au problème pour Alpine Linux. Je ne peux pas être plus précis avec la partie MUSL en dehors de cela.
apk ajouter des en-têtes linux
pip installer psutil
J'avais déjà entré apk add --upgrade py-pip et psuti, donc ils peuvent également être nécessaires.
Le moyen le plus simple de reproduire le problème serait d'utiliser Buildroot:
git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout d8a19c5e4969a5d6485d3704cc72310989109150
vi local.mk
(il devrait avoir le contenu suivant: PYTHON_PSUTIL_OVERRIDE_SRCDIR=/home/user/Documents/versioned/psutil
, fournissez simplement le chemin de votre clone psutil).config
avec le contenu ci-dessousmake
BR2_x86_i686=y
BR2_TOOLCHAIN_BUILDROOT_MUSL=y
BR2_PACKAGE_PYTHON3=y
BR2_PACKAGE_PYTHON_PSUTIL=y
Que dis-tu de ça?
http://askubuntu.com/a/391037
Il semble que vous ayez besoin des packages linux-libc-dev
et / ou linux-headers
installés.
Ces instructions sont pour ubuntu, je ne sais pas quel est le nom du paquet correspondant sur linux alpin.
C'est ce que je mentionne ci-dessus. L'installation des en-têtes linux dans alpine l'a corrigé pour moi.
Oh désolé, j'ai raté ça. Clôture alors.
@giampaolo avez-vous essayé de construire psutil dans Buildroot en suivant les étapes que j'ai fournies? Le problème avec la musl est toujours là.
@DamionWaltermeyer et @ConorIA avaient un problème sans rapport, car les en-têtes du noyau étaient manquants.
Commentaire le plus utile
J'ai une solution au problème pour Alpine Linux. Je ne peux pas être plus précis avec la partie MUSL en dehors de cela.
apk ajouter des en-têtes linux
pip installer psutil
J'avais déjà entré apk add --upgrade py-pip et psuti, donc ils peuvent également être nécessaires.