Pregunta

Estoy tratando de convertir a libcsv uso libtool para que pueda usarlo en Mac OS X sin destrozando el makefile. Cuando trato de ejecutar el archivo MAKE generado a partir de las herramientas que recibo el siguiente error:

~/software/libcsv (gnu_tools) $ make 
tag=CC   --mode=compile gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\"
-DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"libcsv\" 
-DVERSION=\"3.0.1\" -I.     -g -O2 -MT libcsv.lo -MD -MP -MF .deps/libcsv.Tpo -c -o libcsv.lo  
libcsv.c
/bin/sh: --mode=compile: command not found
make: [libcsv.lo] Error 127 (ignored)
mv -f .deps/libcsv.Tpo .deps/libcsv.Plo
mv: rename .deps/libcsv.Tpo to .deps/libcsv.Plo: No such file or directory
make: *** [libcsv.lo] Error 1

Estoy corriendo OS X 10.5. Así que después de un poco de fossicking sobre Noté que el makefile generado tiene una libtool vacío var:

<generated makefile>
LD = 
LDFLAGS = 
LIBOBJS = 
LIBS = 
LIBTOOL = 
LIPO = 
LN_S = 
LTLIBOBJS = 
<more generated makefile>

Si fijo libtool a libtool, entonces todo está bien. Asumo que he cometido un error en mi autoconf o automake archivos que son a continuación:

Makefile.am
lib_LTLIBRARIES = libcsv.la
libcsv_la_SOURCES = libcsv.c
include_HEADERS = csv.h
libcsv_la_LDFLAGS = -version-info 3:1:0
ACLOCAL_AMFLAGS = -I m4

configure.ac
dn1 Process this file with autoconf to produce a configure script.
AC_INIT(libcsv.c)
AM_INIT_AUTOMAKE(libcsv, 3.0.1)
AC_PROG_CC
AC_OUTPUT(Makefile)
AC_PROG_LIBTOOL
AC_CONFIG_MACRO_DIR([m4])
AC_CHECK_FUNCS([strerror])
AC_FUNC_MALLOC
C_PROG_RANLIB
AC_PROG_CXX
LT_INIT
LT_OUTPUT
AC_TYPE_SIZE_T

Si te sirve de ayuda aquí es parte de la config.log:

## ------------------ ##
## Running config.lt. ##
## ------------------ ##
config.lt:680: creating libtool
configure:17115: checking for size_t
configure:17115: gcc -c -g -O2  conftest.c >&5
configure:17115: $? = 0
configure:17115: gcc -c -g -O2  conftest.c >&5
conftest.c: In function 'main':
conftest.c:62: error: syntax error before ')' token
configure:17115: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME ""
| #define PACKAGE_TARNAME ""
| #define PACKAGE_VERSION ""
| #define PACKAGE_STRING ""
| #define PACKAGE_BUGREPORT ""
| #define PACKAGE_URL ""
| #define PACKAGE "libcsv"
| #define VERSION "3.0.1"
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| #define HAVE_STRERROR 1
| #define HAVE_STDLIB_H 1
| #define HAVE_MALLOC 1
| /* end confdefs.h.  */
| #include <stdio.h>
| #ifdef HAVE_SYS_TYPES_H
| # include <sys/types.h>
| #endif
| #ifdef HAVE_SYS_STAT_H
| # include <sys/stat.h>
| #endif
| #ifdef STDC_HEADERS
| # include <stdlib.h>
| # include <stddef.h>
| #else
| # ifdef HAVE_STDLIB_H
| #  include <stdlib.h>
| # endif
| #endif
| #ifdef HAVE_STRING_H
| # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
| #  include <memory.h>
| # endif
| # include <string.h>
| #endif
| #ifdef HAVE_STRINGS_H
| # include <strings.h>
| #endif
| #ifdef HAVE_INTTYPES_H
| # include <inttypes.h>
| #endif
| #ifdef HAVE_STDINT_H
| # include <stdint.h>
| #endif
| #ifdef HAVE_UNISTD_H
| # include <unistd.h>
| #endif
| int
| main ()
| {
| if (sizeof ((size_t)))
|       return 0;
|   ;
|   return 0;
| }
configure:17115: result: yes

Así que ¿alguien sabe lo que he hecho mal?

Gracias de antemano.

¿Fue útil?

Solución

No tengo una respuesta definitiva para usted, pero la primera cosa que me suggst es poner su AC_OUTPUT al final de su configure.ac, después de la LT_INIT. No es completamente este sencillo, pero no es el momento erróneo pensar en el contenido de configure.ac como la ampliación a su vez a fragmentos de script que se ejecutan a su vez. Si usted emite el Makefile configurado antes de que haya encontrado libtool, entonces eso podría explicar LIBTOOL estar vacío.

Un diseño bastante convencional de la configure.ac sería el siguiente:

dnl Process this file with autoconf to produce a configure script.
AC_INIT(libcsv.c)
AM_INIT_AUTOMAKE(libcsv, 3.0.1)
AC_CONFIG_MACRO_DIR([m4])

dnl find programs
AC_PROG_CC
AC_PROG_CXX
LT_INIT
AC_PROG_RANLIB

dnl check functionality
AC_CHECK_FUNCS([strerror])
AC_FUNC_MALLOC
AC_TYPE_SIZE_T

AC_OUTPUT(Makefile)

No creo que necesitaba LT_OUTPUT y el documentos nota que AC_PROG_LIBTOOL es un sinónimo obsoleto para LT_INIT (por lo que tener tanto es probable que buscar problemas).

(A propósito de nada mucho, nota que el OS X tiene un comando llamado libtool, que es nada que ver con GNU Libtool. Estoy bastante seguro de que no es su problema aquí, pero es una de gotcha que se confunde la gente antes)

Otros consejos

Puede intentar volver a hacer cumplir la integración libtool ejecutando libtoolize --force (que tenía un montón de problemas con diferentes versiones libtool incomatible en diferentes huéspedes, libtoolize --force ayuda mucho en estos casos). También esté atento a la salida de configuración para los mensajes libtool, deben leer como esto:

checking if libtool supports shared libraries... yes
configure: creating libtool
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool

especialmente la línea configure: creating libtool debe estar presente en la salida.

Mi configure.ac acaba de:

LT_INIT([dlopen])
AC_SUBST([LIBTOOL_DEPS])

El LT_OUTPUT es para el uso de libtool para las pruebas posteriores dentro de configurarse a sí mismo, y requiere un config.lt a las cosas de configurar. Nunca he tenido que usarlo, así que no sé todo lo que conlleva, pero no puede hacer daño a tomar esa línea y ver si se soluciona el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top