Question

Je suis en train de convertir libcsv à utiliser libtool pour que je puisse l'utiliser sur x mac sans mutiler le makefile. Lorsque je tente d'exécuter le makefile généré à partir des outils que je reçois l'erreur suivante:

~/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

Je suis en cours d'exécution OS X 10.5. Ainsi, après un peu fossicking à propos, j'ai remarqué que le makefile a un vide libtool var:

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

Si je mets à libtool libtool, alors tout va bien. Je suppose que je l'ai fait une erreur dans mon autoconf ou automake fichiers qui sont ci-dessous:

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 c'est une aide ici fait partie du 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

Alors personne ne sait ce que j'ai mal fait?

Merci à l'avance.

Était-ce utile?

La solution

Je n'ai pas une réponse définitive pour vous, mais la première chose que je ferais est suggst de mettre votre AC_OUTPUT à la fin de votre configure.ac, après la LT_INIT. Ce n'est pas complètement ce simple, mais il est pas tort de penser le contenu de configure.ac que l'expansion à son tour à des fragments de script shell qui sont exécutées à son tour. Si vous émettez la configuration Makefile avant que vous ayez trouvé libtool, alors cela pourrait expliquer LIBTOOL être vide.

Une mise en page assez classique de votre configure.ac serait le suivant:

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)

Je ne pense pas que vous aviez besoin LT_OUTPUT et le docs noter que AC_PROG_LIBTOOL est synonyme désapprouvée pour LT_INIT (donc ayant à la fois est probablement demander des ennuis).

(Apropos de rien très bien, notez que OS X a une commande appelée libtool, qui n'a rien à voir avec GNU Libtool. Je suis sûr que ce pas votre problème, mais il est une chasse aux sorcières qui sont des gens confus avant)

Autres conseils

Vous pouvez essayer de ré-appliquer l'intégration de libtool en exécutant libtoolize --force (j'ai eu beaucoup de mal avec les différentes versions de libtool incomatible sur différents hôtes, libtoolize --force aide beaucoup dans ce cas). montre également la sortie de configuration pour les messages libtool, ils doivent se lire comme suit:

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

en particulier la ligne de configure: creating libtool doit être présent dans la sortie.

Mon configure.ac a juste:

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

Le LT_OUTPUT est pour l'utilisation de libtool pour les tests ultérieurs au sein même de configurer et nécessite une config.lt aux choses mis en place. Je ne l'ai jamais eu à l'utiliser, donc je ne sais pas tout ce qui implique, mais il ne peut pas faire du mal à prendre cette ligne et voir si cela résout votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top