Sxiv: Construire sur MacOS

Créé le 26 févr. 2019  ·  9Commentaires  ·  Source: muennich/sxiv

Est-il possible de compiler sxiv 25 sur macos ? Cela semble dépendre de la bibliothèque X11 :

$ make
GEN config.h
CC autoreload_inotify.o
In file included from autoreload_inotify.c:19:
In file included from ./sxiv.h:27:
/usr/local/include/Imlib2.h:26:10: fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>
         ^~~~~~~~~~~~
1 error generated.
make: *** [Makefile:50: autoreload_inotify.o] Error 1

XQuartz est une chose et peut être installé via un fût homebrew. Pour ce que ça vaut, sxiv 1.3.2 est dans l'homebrew et il fonctionne avec xquartz comme dépendance d'exécution. Mais 1.3.2 n'a pas X11 comme dépendance de construction et il arrive il y a cinq ans.

J'ai pu effacer les erreurs de construction X11 en éditant (peut-être bêtement) toutes les bibliothèques dans /opt/X11/include/ avec essentiellement s#<X11#</opt/X11/include/X11# , mais je n'étais toujours pas en mesure de construire à cause de la dépendance de construction de sxiv sur inotify. h :

$ make
CC autoreload_inotify.o
autoreload_inotify.c:25:10: fatal error: 'sys/inotify.h' file not found
#include <sys/inotify.h>
         ^~~~~~~~~~~~~~~
1 error generated.
make: *** [Makefile:50: autoreload_inotify.o] Error 1

Je ne connais pas de fournisseur pour inotify.h sur macos. Si quelqu'un a des suggestions ou a réussi à compiler sxiv 25 sur macos, merci de me le faire savoir.

Commentaire le plus utile

Cela l'a fait. Merci!

Je vais essayer de mettre à jour la formule dans l'homebrew.

Tous les 9 commentaires

Vous pouvez simplement désactiver la fonction de rechargement automatique en utilisant le backend "nop", alors sxiv ne dépendra pas d'inotify. Définissez simplement "AUTORELOAD=nop" pour make.

Si vous êtes plus aventureux, vous pouvez créer un nouveau backend de rechargement automatique qui utilise l'API Mac OS FS Events au lieu d'inotify, pour porter cette fonctionnalité sur mac.

Merci. Cela m'a amené à l'erreur suivante :

$ make AUTORELOAD=nop 
CC autoreload_nop.o
CC commands.o
CC image.o
CC main.o
GEN version.h
CC options.o
CC thumbs.o
thumbs.c:96:32: warning: result of comparison of constant 4294967295 with expression of type 'Imlib_Load_Error' (aka 'enum _imlib_load_error') is always false [-Wtautological-constant-out-of-range-compare]
                                if ((err = r_mkdir(cfile)) == -1)
                                    ~~~~~~~~~~~~~~~~~~~~~~ ^  ~~
1 warning generated.
CC util.o
CC window.o
LINK sxiv
ld: library not found for -lX11
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [Makefile:42: sxiv] Error 1

Je vais travailler dessus maintenant, mais l'aide est appréciée bien sûr.

Si vous êtes plus aventureux, vous pouvez créer un nouveau backend de rechargement automatique qui utilise l'API Mac OS FS Events au lieu d'inotify, pour porter cette fonctionnalité sur mac.

C'est ambitieux pour moi. Je ne sais pas grand-chose sur C. Dans l'état actuel des choses, la mise à jour de la formule homebrew sera difficile car il semble que de nombreux changements à xquartz lui-même soient nécessaires, et je ne sais pas non plus s'ils seront acceptés.

Si je peux obtenir mon propre binaire compilé (et laisser une trace de fil d'Ariane pour les autres), cela devra peut-être suffire.

Moi aussi, j'aime beaucoup sxiv et j'aimerais trouver un moyen de le faire fonctionner sur macos.

J'ai les mêmes erreurs que vous, mais j'ai effacé mon propre message d'erreur pour

CC autoreload_nop.o CC commands.o CC image.o CC main.o GEN version.h CC options.o CC thumbs.o thumbs.c:96:32: warning: result of comparison of constant 4294967295 with expression of type 'Imlib_Load_Error' (aka 'enum _imlib_load_error') is always false [-Wtautological-constant-out-of-range-compare] if ((err = r_mkdir(cfile)) == -1) ~~~~~~~~~~~~~~~~~~~~~~ ^ ~~ 1 warning generated. CC util.o CC window.o LINK sxiv

en ajoutant
LDFLAGS = -L/opt/X11/lib -lX11 -lpthread
au makefile.

J'ai essayé de résoudre l'avertissement dans thumb.c:96 . C'était le seul vrai problème ici. Merci @oskarits d'avoir déterminé quels LDFLAGS sont nécessaires pour le faire compiler sur Mac OS.

Hm, j'ai toujours ce problème quand je n'ai pas piraté les bibliothèques fournies par xquartz :

$ git clone [email protected]:muennich/sxiv.git && cd sxiv && make
Cloning into 'sxiv'...
remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (49/49), done.
remote: Total 3572 (delta 32), reused 58 (delta 26), pack-reused 3497
Receiving objects: 100% (3572/3572), 1.53 MiB | 3.14 MiB/s, done.
Resolving deltas: 100% (2315/2315), done.
GEN config.h
CC autoreload_inotify.o
In file included from autoreload_inotify.c:19:
In file included from ./sxiv.h:27:
/usr/local/include/Imlib2.h:26:10: fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>
         ^~~~~~~~~~~~
1 error generated.
make: *** [Makefile:50: autoreload_inotify.o] Error 1

@muennich à votre avis est-ce un défaut avec xquartz ?

Appeler make AUTORELOAD=nop LDFLAGS=-L/opt/X11/lib LDLIBS=-lpthread devrait fonctionner.

$ make AUTORELOAD=nop LDFLAGS=-L/opt/X11/lib LDLIBS=-lpthread
GEN config.h
CC autoreload_nop.o
In file included from autoreload_nop.c:19:
In file included from ./sxiv.h:27:
/usr/local/include/Imlib2.h:26:10: fatal error: 'X11/Xlib.h' file not found
#include <X11/Xlib.h>
         ^~~~~~~~~~~~
1 error generated.
make: *** [Makefile:50: autoreload_nop.o] Error 1

make AUTORELOAD=nop CPPFLAGS=-I/opt/X11/include LDFLAGS=-L/opt/X11/lib LDLIBS=-lpthread

Cela l'a fait. Merci!

Je vais essayer de mettre à jour la formule dans l'homebrew.

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

Questions connexes

se7en-x230 picture se7en-x230  ·  5Commentaires

SammysHP picture SammysHP  ·  3Commentaires

anko picture anko  ·  4Commentaires

crocket picture crocket  ·  6Commentaires

Knusper picture Knusper  ·  4Commentaires