尝试解决此处发布的问题时:__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/