autotools 可以生成未链接的对象而不是库吗?

标签 c autotools

尝试解决此处发布的问题时:__start_section and __stop_section symbols missing when linking to library我已经确定最好让我的 C autotools 项目在不生成库的情况下编译对象列表(或者只要中间对象存在,我就可以忽略该库)。这是我当前的 Makefile.am:

AM_CFLAGS = -I$(top_srcdir)/drivers/include
lib_LIBRARIES = libdriver.a
libdriver_a_SOURCES = $(STATIC_DRIVER_FILES)
STATIC_DRIVER_FILES = src/driver.c

if FLASH_SIM
STATIC_DRIVER_FILES += flash/flash_sim.c
endif

if UART_SIM
STATIC_DRIVER_FILES += uart/uart_sim.c
endif

这工作正常并创建了 libdriver.a。我需要的是一个变量 STATIC_DRIVER_OBJS,它包含我可以从主应用程序链接到的所有已编译对象的列表。上面发布的问题解释了为什么我不能直接链接库。

最佳答案

你可以尝试这样的事情:

whizbang_SOURCES = ... # the main executable
whizbang_LDADD = $(libdriver_a_OBJECTS) ...

我更愿意这样做:

noinst_LTLIBRARIES = libdriver.la
...
libdriver_la_SOURCES = src/driver.c

if FLASH_SIM
libdriver_la_SOURCES += flash/flash_sim.c
endif
if UART_SIM
libdriver_la_SOURCES += uart/uart_sim.c
endif

...
whizbang_LDADD = $(libdriver_la_OBJECTS) ...

这样您就不必担心处理 libdriver.a(无需安装)。

关于autotools 可以生成未链接的对象而不是库吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893528/

相关文章:

c - Linux:stdout 和 stderr 到套接字

CRC 校验 XOR 函数返回值始终为 0

autotools - 带有Autotools的预编译头文件

cmake - 从 cmake 到 autotools 的翻译?

c - Libtool 为对象添加前缀,但 gcov 要求它们没有前缀

c - 信号处理代码的 Glib 哈希表问题

c++ - 桥接 USB 主机到设备

c - 为什么我用这个程序得到大量的输出?

c++ - automake第三方库

makefile - 如何链接到 autotools 项目中刚刚构建的库