Bei der Konvertierung zu libtool und autoconf auto nicht libtool finden
Frage
Ich versuche zu verwenden libtool zu konvertieren libcsv so dass ich es auf Mac OS X ohne Mangeln die Make-Datei verwenden kann. Wenn ich versuche, die Make-Datei von den Werkzeugen erzeugten betreibe ich die folgende Fehlermeldung erhalten:
~/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
Ich bin mit OS X 10.5. So nach einem wenig über mich fossicking bemerkte, dass die Make-Datei ein leer libtool var erzeugt hat:
<generated makefile>
LD =
LDFLAGS =
LIBOBJS =
LIBS =
LIBTOOL =
LIPO =
LN_S =
LTLIBOBJS =
<more generated makefile>
Wenn ich Libtool auf libtool gesetzt ist, dann ist alles gut. Ich nehme an, ich habe einen Fehler in meinem autoconf oder auto Dateien vorgenommen, die unten sind:
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
Wenn es jede Hilfe hier ist Teil der 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
So weiß jemand, was ich falsch gemacht habe?
Vielen Dank im Voraus.
Lösung
ich nicht eine definitive Antwort für Sie habe, aber das erste, was ich suggst würde Ihre AC_OUTPUT
am Ende Ihres configure.ac
zu setzen, nach dem LT_INIT
. Es ist nicht vollständig diese einfachen, aber es ist nicht viel falsch vom Inhalt configure.ac
zu denken, wie wiederum zu Fragmenten von Shell-Skript erweitert, die wiederum ausgeführt werden. Wenn Sie die konfigurierte Makefile
emittieren, bevor Sie libtool
gefunden haben, dann erklären, dass könnte LIBTOOL
leer zu sein.
Ein ziemlich konventionelles Layout Ihrer configure.ac
wäre die folgende:
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)
Ich glaube nicht, Sie LT_OUTPUT
benötigt, und die docs beachten Sie, dass AC_PROG_LIBTOOL
für LT_INIT
ein veraltetes Synonym (fragen beide so ist, wahrscheinlich für Probleme).
(A propos von nichts sehr viel, beachten Sie, dass OS X einen Befehl hat libtool
genannt, die nichts mit GNU Libtool zu tun ist. Ich bin mir ziemlich sicher, dass das nicht Ihr Problem hier, aber es ist ein gotcha, dass die Menschen vor verwirrt ist)
Andere Tipps
Sie können versuchen, die libtool Integration neu zu erzwingen, indem libtoolize --force
läuft (ich mit verschiedenen incomatible libtool Versionen auf verschiedenen Hosts viel Mühe hatte, libtoolize --force hilft viel in solchen Fällen). achten Sie auch die configure Ausgang für libtool Nachrichten, müssen sie wie folgt lauten:
checking if libtool supports shared libraries... yes
configure: creating libtool
appending configuration tag "CXX" to libtool
appending configuration tag "F77" to libtool
vor allem der configure: creating libtool
Zeile in der Ausgabe vorhanden sein muss.
Meine configure.ac gerade hat:
LT_INIT([dlopen])
AC_SUBST([LIBTOOL_DEPS])
Die LT_OUTPUT ist für die Verwendung von libtool für spätere Tests im configure selbst und erfordert eine config.lt zu Satz Dinge. Ich hatte noch nie, es zu benutzen, so dass ich nicht alles, was dazu gehört nicht kennen, aber es kann nicht schaden zu nehmen, um diese Linie und sehen, ob das behebt das Problem.