【问题标题】:Automake and librariesAutomake 和库
【发布时间】:2012-03-24 12:41:56
【问题描述】:

我正在尝试使用自动工具生成共享和静态库,到目前为止我已经

配置.ac:

  # Process this file with autoconf to produce a configure script.

  AC_PREREQ([2.68])
  AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
  AM_INIT_AUTOMAKE(memory,1.0.0)
  #AC_CONFIG_SRCDIR([include/memory.h])
  #AC_CONFIG_HEADERS([config.h])

  # Checks for programs.
  AC_PROG_CC

  AM_PROG_CC_C_O
  AC_PROG_RANLIB
  AC_PROG_LIBTOOL


  # Checks for libraries.

  # Checks for header files.
  AC_CHECK_HEADERS([stdlib.h])

  # Checks for typedefs, structures, and compiler characteristics.

  # Checks for library functions.
  AC_FUNC_MALLOC

  AC_CONFIG_FILES([Makefile])
  AC_OUTPUT

makefile.am 在我的主目录中:

lib_LTLIBRARIES = libmemory.la
libmemory_la_SOURCES = src/memory.c
libmemory_la_CFLAGS = -I./include

我希望他只在这个目录中创建两个文件,.a 和 .so,但是他创建了 ./libs 目录和这样的文件:

libmemory.a
libmemory.la -> ../libmemory.la
libmemory.lai
ibmemory_la-memory.o
libmemory.so -> libmemory.so.0.0.0
libmemory.so.0 -> libmemory.so.0.0.0
libmemory.so.0.0.0

那么我应该怎么做,只在动态版本中创建一个简单的静态库?

【问题讨论】:

    标签: autoconf automake


    【解决方案1】:

    .libs是libtool内部实现的特定目录,也就是说,你不要想太多。你会得到一个libmemory.la,它代表你构建的所有变体(静态、共享、..)。在执行make install 时,它们都会按预期正确安装。

    库使用不同的版本控制方案,而 libtool 必须默认设置,这就是为什么你会得到 libmemory.so.0.0.0。

    【讨论】:

    • 很好,但我不想让他把那些库放在那里,我也不想安装它们。我只是希望他将 .a 和 .so 文件放在调用自动​​工具的同一目录中。
    • @Andna:您无法选择 libtool 将其库隐藏在何处。 libtool 中的所有内容都是为了让您不必关心库的实际位置。只要您想引用该库,只需使用.la 文件即可。如果您解释了为什么要让 .so.a 文件可见的原因,也许我们可以向您展示如何以与 GNU 构建系统兼容的方式组织您的项目(提醒:Autotools 可以为您提供帮助您创建的是 GNU 构建系统,而不是您可能习惯的任何构建系统)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多