【问题标题】:Libtool: link one of the project generated libs staticallyLibtool:静态链接项目生成的库之一
【发布时间】:2020-12-13 20:32:01
【问题描述】:

我有一个构建项目

autoreconf --install
./configure
make

并包含configure.acMakefile.am
该项目构建了 2 个库和一个动态链接它们的可执行文件。一个库是cpp,另一个和可执行文件是纯C。我想静态链接其中一个库(cpp之一)并保持c库动态链接。我的简化版Makefile.am

ACLOCAL_AMFLAGS = -I m4

SUBDIRS = include doc po

AM_CPPFLAGS = -Iinclude
AM_CPPFLAGS += -D__STRICT_ANSI__
AM_CPPFLAGS += -DNDEBUG

WARNFLAGS = -Wall

AM_CFLAGS = $(WARNFLAGS) $(OPENMP_CXXFLAGS) -std=c11
AM_CXXFLAGS = $(WARNFLAGS) -std=c++11

localedir = $(datadir)/locale
DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@

lib_LTLIBRARIES = libmy.la libmy-settings.la

libmy_la_SOURCES = src/sharedlib.c src/sharedlib.h

libmy_settings_la_SOURCES = src/staticlib.cpp src/staticlib.h

bin_PROGRAMS = myapp

myapp_SOURCES = myapp.c

myapp_LDADD = libmy.la libmy-settings.la

libtool 在./.libs/ 中生成.a.so 文件,但Libtool 更喜欢.so。在最后一个make 命令中,我看到了gcc -Wall -std=c11 -g -O2 -o .libs/myapp myapp.o ./.libs/libmy.so ./.libs/libmy-settings.so。如果我用gcc -Wall -std=c11 -g -O2 -o .libs/myapp myapp.o ./.libs/libmy.so ./.libs/libmy-settings.a 替换它 - 它可以工作并给我我正在努力实现的目标。问题是:如何在Makefile.am的帮助下自动实现?

据我了解,我不能只添加myapp_LDFLAGS=-lmy-settings.a bcs,它不会替换共享链接参数,而是添加一个新参数。而且我无法从lib_LTLIBRARIESmyapp_LDADD 中删除libmy-settings.la,因为它根本不会在./.libs/ 中生成libmy-settings.a 或libmysettings.so。有什么线索吗?

【问题讨论】:

  • 您是否需要将libmy-settings 作为可单独安装的库?也就是说,您是否试图让其他程序也能够链接它?
  • libmy.so 是一个可单独安装的库。 libmy-settings 是我为项目贡献的代码,我想让它静态链接 lib 并且不可安装。

标签: makefile build static-linking autotools libtool


【解决方案1】:

由于libmy-settings 不需要是可单独安装的库,因此您有两个非常简单的选择:

  1. 将其来源添加到myapp_SOURCES,并将libmy-settings.la 完全排除在图片之外。附加源位于不同的目录并以不同的(支​​持自动工具的)语言编写应该不是问题。就 Autotools 选择正确的链接器驱动程序和选项而言,这种方法可能对您有利。

  2. libmy-settings.la 构建为实用程序库,而不是可安装的库。这是通过将其标记为noinst来实现的:

    lib_LTLIBRARIES = libmy.la
    noinst_LTLIBRARIES = libmy-settings.la
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多