Sxiv: Construyendo en MacOS

Creado en 26 feb. 2019  ·  9Comentarios  ·  Fuente: muennich/sxiv

¿Es posible construir sxiv 25 en macos? Parece depender de la biblioteca 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 es una cosa y se puede instalar a través de un barril casero. Por lo que vale, sxiv 1.3.2 está en homebrew y se ejecuta con xquartz como una dependencia de tiempo de ejecución. Pero 1.3.2 no tiene X11 como una dependencia de compilación y se acerca a los cinco años.

Pude borrar los errores de compilación de X11 editando (quizás estúpidamente) todas las bibliotecas en /opt/X11/include/ básicamente con s#<X11#</opt/X11/include/X11# , pero aún no pude compilar debido a la dependencia de compilación de sxiv en 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

No conozco un proveedor para inotify.h en macos. Si alguien tiene sugerencias o ha logrado construir sxiv 25 en macos, hágamelo saber.

Comentario más útil

Eso lo hizo. ¡Gracias!

Intentaré actualizar la fórmula en homebrew.

Todos 9 comentarios

Simplemente puede deshabilitar la función de recarga automática usando el backend "nop", luego sxiv no dependerá de inotify. Simplemente configure "AUTORELOAD=nop" para hacer.

Si es más aventurero, puede crear un nuevo backend de recarga automática que use la API de Mac OS FS Events en lugar de inotify, para transferir esta función a Mac.

Gracias. Eso me llevó al siguiente error:

$ 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

Estaré trabajando en esto ahora, pero la ayuda es apreciada, por supuesto.

Si es más aventurero, puede crear un nuevo backend de recarga automática que use la API de Mac OS FS Events en lugar de inotify, para transferir esta función a Mac.

Eso es ambicioso para mí. No sé mucho sobre C. Tal como está, actualizar la fórmula homebrew será un desafío, ya que parece que se necesitan muchos cambios en xquartz, y tampoco sé si serán aceptados.

Si puedo compilar mi propio binario (y dejar un rastro de migas de pan para otros), eso puede ser suficiente.

Yo también me he encariñado mucho con sxiv y me encantaría encontrar una manera de hacer que funcione en macos.

Recibí los mismos errores que usted, pero he borrado mi propio mensaje de error para solo

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

añadiendo
LDFLAGS = -L/opt/X11/lib -lX11 -lpthread
al archivo MAKE.

Traté de resolver la advertencia en thumb.c:96 . Este fue el único problema real aquí. Gracias @oskarits por determinar qué LDFLAGS se necesitan para compilarlo en Mac OS.

Hm, todavía tengo este problema cuando no he pirateado las bibliotecas proporcionadas por 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 en tu opinión, ¿es esto un defecto con xquartz?

Llamar a make AUTORELOAD=nop LDFLAGS=-L/opt/X11/lib LDLIBS=-lpthread debería funcionar.

$ 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

Eso lo hizo. ¡Gracias!

Intentaré actualizar la fórmula en homebrew.

¿Fue útil esta página
0 / 5 - 0 calificaciones