Makefile Libtool:静态链接一个项目生成的lib

Makefile Libtool:静态链接一个项目生成的lib,makefile,build,static-linking,autotools,libtool,Makefile,Build,Static Linking,Autotools,Libtool,我有一个用 autoreconf --install ./configure make 并包含configure.ac和Makefile.am 该项目构建了两个库和一个动态链接它们的可执行文件。一个库是cpp,另一个是纯C。我想静态链接其中一个库(cpp One),并保持C库动态链接。我的简化Makefile.am是 ACLOCAL_AMFLAGS = -I m4 SUBDIRS = include doc po AM_CPPFLAGS = -Iinclude AM_CPPFLAGS +=

我有一个用

autoreconf --install
./configure
make
并包含
configure.ac
Makefile.am

该项目构建了两个库和一个动态链接它们的可执行文件。一个库是cpp,另一个是纯C。我想静态链接其中一个库(cpp One),并保持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\u LDFLAGS=-lmy设置。a
bcs它不会替换共享链接参数,而是添加一个新参数。我无法从
libu LTLIBRARIES
myapp LDADD
bcs中删除
libmy settings.la
,因为它根本不会生成libmy settings.a或libmysettings.so in./.libs/。有什么线索吗?

因为
libmy settings
不需要是一个单独安装的库,所以您有两个非常简单的选择:

  • 将其源添加到
    myapp\u sources
    ,并将
    libmy settings.la
    完全排除在图片之外。其他源位于不同的目录中,并使用不同的语言(支持autotools)编写,这应该不是问题。在自动工具选择正确的链接器驱动程序和选项方面,这种方法可能对您有利,而无需您的干预

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

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

  • 您是否需要将
    libmy设置
    作为可单独安装的库?也就是说,您是否也在尝试提供其他程序来链接它?
    libmy.so
    是一个可单独安装的库。
    libmy设置
    是我为项目贡献的代码,我希望使其静态链接到lib且不可安装。第二个选项不起作用!谢谢