<p>psutil ne parvient pas à se compiler avec la bibliothèque MUSL C</p>

Créé le 18 août 2016  ·  11Commentaires  ·  Source: giampaolo/psutil

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
bug

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.

Tous les 11 commentaires

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 #includede psutil / _psutil_linux.c Je peux compiler le package, mais je reçois également l'avertissement suivant:

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:

  1. git clone git://git.buildroot.net/buildroot
  2. cd buildroot
  3. git checkout d8a19c5e4969a5d6485d3704cc72310989109150
  4. 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)
  5. créez .config avec le contenu ci-dessous
  6. invoquer make
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.

Cette page vous a été utile?
0 / 5 - 0 notes