Estoy tratando de usar make
para construir un binario a partir del código fuente de un programa que necesito.
Enlace a la fuente: https://github.com/pali/0xFFFF
Requiere usb.h, que parece ser parte de usblib-compat. He instalado este último por brew install usblib-compat
. Pero todavía usb.h no se puede ver, aunque sé dónde está (bajo /usr/local/Cellar/usblib-compat/version/include).
He leído mucho por Internet y he intentado configurar muchas variables de entorno, pero sin éxito. ¿Alguna idea?
ACTUALIZACIÓN
Después de muchas pruebas, he progresado de alguna manera. A saber, el archivo config.mk se lee claramente durante el proceso de make'ing, aunque tengo que admitir que no me queda claro cómo se hace; de todos modos, me di cuenta de dos líneas comentadas:
CPPFLAGS += -I/usr/local/include
LDFLAGS += -L/usr/local/lib -Wl,-R/usr/local/lib
Los descomenté y ahora pasa algo: se encuentra el usb.h. Creo que la primera de estas definiciones de variables le dice al compilador dónde buscar los archivos de cabecera, y la segunda le dice al enlazador dónde buscar las bibliotecas - pero de nuevo no me queda del todo claro.
En cualquier caso, sigo teniendo problemas. Concretamente, el proceso de make'ing emite dos advertencias y un error, y luego se detiene:
usb-device.c:90:57: warning: unused parameter 'udev' [-Wunused-parameter]
static void usb_reattach_kernel_driver(usb_dev_handle * udev, int interface) {
^
usb-device.c:90:67: warning: unused parameter 'interface' [-Wunused-parameter]
static void usb_reattach_kernel_driver(usb_dev_handle * udev, int interface) {
usb-device.c:324:13: error: use of undeclared identifier 'RTLD_DEFAULT' if ( dlsym(RTLD_DEFAULT, "libusb_init") )
Parece que este programa es difícil de portar de Linux a Mac, aunque creo que debería ser portable. Si alguien tiene alguna idea sobre qué hacer (aparte de ejecutar una distribución de Linux...), se agradecería mucho.
0 votos
En la página de manual de
dlsym()
(en MacOS Sierra 10.12.3), dice: _Sidlsym()
se llama con el manejador especial RTLD_DEFAULT, entonces todas las imágenes mach-o del proceso (excepto las cargadas condlopen(xxx, RTLD_LOCAL)
) se buscan en el orden en que fueron cargados. Esto puede ser una búsqueda costosa y debe evitarse._ Por lo tanto, debería obtener el símbolo definido si incluye<dlfcn.h>
a menos que haya conseguido especificar (directa o indirectamente) un#define
que impide que se especifique el símbolo.0 votos
@JonathanLeffler En
usb-device.c
He encontrado lo siguiente:21 #ifndef _GNU_SOURCE 22 #define _GNU_SOURCE 23 #endif 24 25 #include <stdio.h> 26 #include <stdlib.h> 27 #include <stdint.h> 28 #include <string.h> 29 #include <errno.h> 30 #include <ctype.h> 31 #include <signal.h> 32 #include <dlfcn.h>
Así quedlfcn.h
parece que ya está incluido, y también_GNU_source
lo que debería permitir la definición deRTLD_DEFAULT
.