尝试静态链接Boost时链接器错误

时间:2017-09-12 07:52:17

标签: c++ boost makefile linker-errors

我正在尝试在我的程序中包含一个Boost库,但是我在静态链接我的程序时遇到了困难。即使我已将scala> input.map(_.map(_.toString)) res0: List[List[String]] = List(List(1234), List(234, 678), List(8765, 90876, 1)) 添加到我的makefile中,我也收到了一堆链接器错误。

例如,在编译期间我得到-L/usr/include/boost/ -lboost_filesystem

我的Boost版本是1.61.0.2,我运行的是Ubuntu 16.10(64位)和gcc版本6.2.0 20161005.我的undefined reference to boost::iostreams::detail::gzip_footer::reset()'等增强库位于accumulators, algorithms, ...,所以我的makefile看起来像这样:

/usr/include/boost

我正在尝试编译以下文件(在线找到的示例)

CXX = g++
CXXFLAGS = -static -std=c++11 -Wall
LDFLAGS  = -L/usr/include/boost/ -lboost_filesystem
DEPFLAGS = -MM


SRC_DIR = ./src
OBJ_DIR = ./obj
SRC_EXT = .cpp
OBJ_EXT = .o

TARGET = main

SRCS := $(wildcard $(SRC_DIR)/*$(SRC_EXT))
OBJS := $(SRCS:$(SRC_DIR)/%$(SRC_EXT)=$(OBJ_DIR)/%$(OBJ_EXT))
DEP = depend.main


.PHONY: clean all depend

all: $(TARGET)

$(TARGET): $(OBJS)
    @echo "-> linking $@"
    @$(CXX) $^ $(LDFLAGS) -o $@

$(OBJ_DIR)/%$(OBJ_EXT) : $(SRC_DIR)/%$(SRC_EXT)
    @echo "-> compiling $@"
    @$(CXX) $(CXXFLAGS) -o $@ -c $<

clean:
    @echo "removing objects and main file"
    @rm -f $(OBJS) $(TARGET)  *.out  

$(SRC_DIR)/%.$(SRC_EXT): 
    $(CXX) $(DEPFLAGS) -MT \
    "$(subst $(SRC_DIR),$(OBJ_DIR),$(subst $(SRC_EXT),$(OBJ_EXT),$@))" \
    $(addprefix ,$@) >> $(DEP);

clear_dependencies:
    @echo "-> (re-)building dependencies";
    @$(RM) $(DEP)

depend: clear_dependencies $(SRCS)


-include $(DEP)

1 个答案:

答案 0 :(得分:1)

您的程序根本不使用libboost_filesystem。唯一的 它所依赖的提升库是liboost_iostreams