2010-07-02 3 views
4

Я пытаюсь преобразовать libcsv для использования libtool, поэтому я могу использовать его на mac os x без искажения make-файла. Когда я пытаюсь запустить сборочный файл сгенерированный из инструментов, которые я получаю следующее сообщение об ошибке:При преобразовании в libtool automake и autoconf не удается найти libtool

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

Я бегу OS X 10.5. Так после немного fossicking о я заметил, что Makefile генерироваться имеет пустой LIBTOOL вар:

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

Если установить LIBTOOL в LIBTOOL, то все хорошо. Я предполагаю, что я сделал ошибку в моих AUTOCONF или AutoMake файлы, которые находятся ниже:

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 

Если это любая помощь здесь является частью 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 

Так кто-нибудь знает, что Я сделал не так?

Заранее благодарен.

ответ

7

У меня нет определенного ответа для вас, но первое, что я хотел бы предложить, это поместить ваш AC_OUTPUT в конце вашего configure.ac после LT_INIT. Это не полностью это просто, но не глупо думать о содержимом configure.ac как расширяющемся, в свою очередь, фрагментах скрипта оболочки, которые исполняются в свою очередь. Если вы испустили настроенный Makefile, прежде чем вы нашли libtool, это может объяснить, что пустым является LIBTOOL.

Довольно обычный макет вашего configure.ac будет следующим:

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) 

Я не думаю, что вам нужно LT_OUTPUT и docs отмечают, что AC_PROG_LIBTOOL является устаревшим синонимом LT_INIT (так как имея, вероятно, требуя неприятностей).

(По поводу ничего особого, обратите внимание, что OS X имеет команду libtool, которая не имеет ничего общего с GNU Libtool. Я почти уверен, что это не ваша проблема здесь, но это гота, которая смущает людей раньше)

+0

Норман, большое спасибо за это. Перемещение AC_OUTPUT в конец файла, а затем удаление AC_PROG_LIBTOOL сделало трюк. – robertpostill

1

Вы можете попытаться восстановить интеграцию libtool, запустив libtoolize --force (у меня были проблемы с различными версиями libtool на разных хостах, libtoolize --force помогает в таких случаях). Также следите вывод настроит для LIBTOOL сообщений, они должны читать так:

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

особенно configure: creating libtool линия должна присутствовать на выходе.

+0

Hi Rudi, Спасибо, что ответили.Я повторно запустил libtoolize -force и заметил следующее в выводе: Проверка путей к кодировке жесткого кода в программах ... немедленная configure: создание ./config.lt config.lt: создание libtool проверка размера_раз. .. да Тот же ответ на шаге, хотя и не исправился, я боюсь. – robertpostill

+0

Вы можете запустить скрипт configure с более подробным выводом, выполнив команду «sh -x configure» и выполнить поиск вывода для 'LIBTOOL ='. Также найдите 'LIBTOOL =' строки в configure (там должна быть строка '# Всегда использовать нашу собственную строку libtool.'). BTW: с какой версией autoconf был создан скрипт configure (configure --help)? Возможно, восстановление системы сборки с помощью новых инструментов autoconf + aclocal + automake + libtool может помочь (сначала сделайте резервную копию, этот шаг может серьезно повредить вещи). . – Rudi

+0

Rudi, Извините за задержку, я не проверил, чтобы увидеть комментарии приходят в любом случае, ./configure --version возвращается: $ ./configure --version Configure порожденной GNU Autoconf 2,65 Copyright (C) 2009 Free Software Foundation, Inc. Этот скрипт конфигурации является бесплатным программным обеспечением; Фонд бесплатного программного обеспечения предоставляет неограниченное разрешение на копирование, распространение и изменение его. – robertpostill

0

Моего configure.ac просто есть:

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

LT_OUTPUT для использования Libtool для последующих испытаний внутри самого конфигурирования, и требует config.lt, чтобы установить вещи. Мне никогда не приходилось его использовать, поэтому я не знаю, что все это влечет за собой, но это не помешает сделать эту строку и посмотреть, устраняет ли это вашу проблему.