عند التحويل إلى Libtool Automake و Autoconf لا يمكن العثور على libtool

StackOverflow https://stackoverflow.com/questions/3164810

سؤال

أحاول تحويل libcsv لاستخدام libtool حتى أتمكن من استخدامه على Mac OS X دون تشغيل Makefile. عندما أحاول تشغيل makefile التي تم إنشاؤها من الأدوات ، أحصل على الخطأ التالي:

~/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. لذلك بعد القليل من التذمر حول ، لاحظت أن 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

فهل يعرف أحد ما الذي ارتكبته؟

شكرا مقدما.

هل كانت مفيدة؟

المحلول

ليس لدي إجابة محددة لك ، لكن أول شيء كنت سأقوم بوضعه AC_OUTPUT في نهاية الخاص بك configure.ac, ، بعد LT_INIT. ليست كذلك تماما هذا بسيط ، لكن ليس من الخطأ التفكير في محتويات configure.ac مع التوسع بدوره إلى شظايا نص shell التي يتم تنفيذها بدورها. إذا قمت بتصميم التكوين 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, ، و ال مستندات .لاحظ أن AC_PROG_LIBTOOL هو مرادف من إهمال ل LT_INIT (لذلك ربما يكون كلاهما يسأل عن المتاعب).

(Apropos من لا شيء كثيرًا ، لاحظ أن OS X لديه أمر يسمى libtool, ، وهو ما لا علاقة له بـ Gnu Libtool. أنا متأكد من أن هذه ليست مشكلتك هنا ، لكنها غوتشا مرتبكة من قبل)

نصائح أخرى

يمكنك محاولة إعادة تكامل Libtool عن طريق التشغيل libtoolize --force (واجهت الكثير من المتاعب مع إصدارات LIBTOOL المختلفة التي لا يمكن أن تكون على مضيفات مختلفة ، LIBTOOLIZE -القوة تساعد كثيرًا في مثل هذه الحالات). احترس أيضًا من إخراج تكوين رسائل 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 يجب أن يكون الخط موجودًا في الإخراج.

بلدي التكوين. AC فقط:

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

LT_Output هو استخدام libtool للاختبارات اللاحقة داخل تكوين نفسه ، ويتطلب config.lt لإعداد الأشياء. لم أضطر أبدًا إلى استخدامه ، لذلك لا أعرف كل ما يستلزمه ، لكن لا يمكن أن يضر هذا الخط ومعرفة ما إذا كان ذلك يحدد مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top