【发布时间】:2020-12-13 20:32:01
【问题描述】:
我有一个构建项目
autoreconf --install
./configure
make
并包含configure.ac 和Makefile.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_LTLIBRARIES 或myapp_LDADD 中删除libmy-settings.la,因为它根本不会在./.libs/ 中生成libmy-settings.a 或libmysettings.so。有什么线索吗?
【问题讨论】:
-
您是否需要将
libmy-settings作为可单独安装的库?也就是说,您是否试图让其他程序也能够链接它? -
libmy.so是一个可单独安装的库。libmy-settings是我为项目贡献的代码,我想让它静态链接 lib 并且不可安装。
标签: makefile build static-linking autotools libtool