2010-07-02 2 views
4

libcsv를 libtool을 사용하도록 변환하려고합니다. 그래서 makefile을 mangling하지 않고 xslinux에서 사용할 수 있습니다. 도구에서 생성 된 makefile을 실행하려고하면 다음 오류가 발생합니다.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를 실행 중입니다. 내가 libtool가 libtool을 설정하면

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

는, 모든 것이 잘 : 그래서 대해 조금 fossicking 후 생성 된 메이크 빈 libtool이 var에 문제가 있습니다.

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 

것은 그래서 사람이 무엇을 알고 있나요 내가 아래에있는 내 autoconf를 또는 automake는 파일에 실수를했다고 가정 나는 잘못 했니?

미리 감사드립니다.

답변

7

확실한 답변은 없지만 가장 먼저 할 일은 AC_OUTPUTconfigure.ac의 끝에 넣고 LT_INIT 다음에 넣는 것입니다. 은 완전하게이 아니지만, configure.ac의 내용을 순서대로 실행되는 셸 스크립트의 조각으로 차례대로 확대하는 것이 생각만큼 멀리는 아닙니다. libtool을 찾기 전에 구성된 Makefile을 내보내는 경우 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을 필요로 생각하고 AC_PROG_LIBTOOLLT_INIT에 대한 사용되지 않는 동의어 (그래서 모두가 아마 가지고 있다는 docs 참고하지 않는다 문제를 묻는 질문).

(OSX에는 GNU Libtool과 아무런 관련이없는 libtool이라는 명령이 있습니다. 저는 이것이 여러분의 문제가 아니라고 확신합니다. 이전에는 사람들이 혼란 스러웠습니다)

+0

노먼, 정말 고마워. AC_OUTPUT을 파일 끝으로 이동 한 다음 AC_PROG_LIBTOOL을 제거하면 트릭을 수행합니다. – robertpostill

1

libtoolize --force을 실행하여 libtool 통합을 다시 시도 할 수 있습니다 (여러 호스트에서 서로 다른 호환되지 않는 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

안녕하세요, 응답 해 주셔서 감사합니다.libtoolize --force를 다시 실행하여 출력에서 ​​다음을 관찰했습니다. 라이브러리 경로를 프로그램에 하드 코딩하는 방법을 확인했습니다. 즉각 구성 : 만들기 ./config.lt config.lt : libtool 만들기 size_t를 확인합니다. .. 예 그래도 그걸 수정하지 않았기 때문에 메이크 단계에서 같은 반응을 보았습니다. – robertpostill

+0

'sh -x configure'를 실행하여 좀 더 자세한 출력으로 configure 스크립트를 실행하고'LIBTOOL ='에 대한 출력을 검색 할 수 있습니다. 또한 configure에서'LIBTOOL ='줄을 찾아보십시오 (위의'# 항상 자신의 libtool을 사용하십시오.'줄이 있어야합니다). BTW : 어떤 버전의 autoconf가 configure 스크립트가 만들어 졌습니까 (configure --help)? 아마도 새로운 autoconf + aclocal + automake + libtool 도구를 사용하여 빌드 시스템을 다시 생성하는 것이 도움이 될 수 있습니다 (백업을 먼저 작성하면이 단계가 심각하게 문제를 일으킬 수 있습니다). . (C) GNU Autoconf에 2.65 저작권에 의해 생성 $ ./configure를 --version 구성 : – Rudi

+0

루디는 내가 코멘트 와서보고 확인하지 않았다 지연 죄송합니다 어쨌든, --version 수익을 ./configure 아마 2009 Free Software Foundation, Inc. 이 configure 스크립트는 무료 소프트웨어입니다. 자유 소프트웨어 재단 은 복사, 배포 및 수정할 수있는 무제한 권한을 제공합니다. 또한 구성에 libtool이 검색 – robertpostill

0

내 configure.ac는이 다음 LT_OUTPUT은 구성 자체 내에서 나중에 시험에서 libtool을 사용하는 것입니다

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

, 사물을 설정하는 config.lt이 필요합니다. 나는 그걸 사용하지 않았기 때문에 그 모든 것을 알 수는 없지만 그 라인을 꺼내서 문제가 해결되는지 알아봐야한다는 것은 상상할 수 없습니다.

관련 문제