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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top