2010-07-02 79 views
4

我想轉換libcs​​v以使用libtool,所以我可以在mac os x上使用它,而不會損壞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。所以我大概有點fossicking後發現,所產生的Makefile有一個空的libtool VAR:

<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的內容依次擴展爲依次執行的shell腳本的碎片並沒有太大的錯誤。如果在發現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_OUTPUTdocs注意到AC_PROG_LIBTOOLLT_INIT棄用的代名詞(所以有兩種可能尋求麻煩)。

(沒什麼大不了的,請注意,OS X有一個叫做libtool的命令,這與GNU Libtool沒什麼關係,我敢肯定這不是你的問題,但它是一個令人困惑的問題)

+0

諾曼,非常感謝。將AC_OUTPUT移動到文件的末尾,然後移除AC_PROG_LIBTOOL就行了。 – robertpostill 2010-07-12 23:09:07

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

Hi Rudi, 感謝您的回覆。我重新運行libtoolize --force並在輸出中觀察到以下內容: 檢查如何將庫路徑硬編碼爲程序... immediate configure:creating ./config.lt config.lt:創建libtool 檢查size_t。 ..是的 在製作步驟中的相同反應,但沒有解決它,我害怕。 – robertpostill 2010-07-07 13:31:14

+0

通過執行'sh -x configure',你可以運行配置腳本以獲得更多的詳細輸出,並搜索'LIBTOOL ='的輸出。另外在配置中尋找'LIBTOOL ='行(應該有一個'#總是使用我們自己的libtool.'行)。順便說一句:使用哪個版本的autoconf創建configure腳本(configure --help)?也許使用更新的autoconf + aclocal + automake + libtool工具重建構建系統可能會有所幫助(首先進行備份,這一步可能會嚴重搞砸)。 。 – Rudi 2010-07-08 11:35:36

+0

魯迪, 對不起,我沒有檢查,看看評論進來延遲無論如何,在./configure --version回報:通過GNU的Autoconf 2.65 版權所有產生 $的./configure --version 配置 (C) 2009 Free Software Foundation,Inc. 此配置腳本是免費軟件;自由軟件基金會 給予無限的權限來複制,分發和修改它。 – robertpostill 2010-07-12 07:07:22

0

我configure.ac只是有:

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

的LT_OUTPUT是使用libtool的configure命令本身後面的測試,並且需要config.lt設置的東西了。我從來沒有必要使用它,所以我不知道所有這一切,但它可以不傷害採取這條線,看看是否可以解決您的問題。