在cygwin下的makefile中链接boost库

Linking boost libraries in makefile under cygwin

本文关键字:链接 boost makefile cygwin 下的      更新时间:2023-10-16

我正在尝试使用makefile与cygwin链接我的程序与boost库。这是我的makefile:

CXX = g++
CXXFLAGS = -Wno-signed-compare -Wall -std=c++11 -funsigned-char -I /cygdrive/e/boost/include/boost-1_55/boost 
LNKFLAGS = -L cygdrive/e/boost/lib
SRCDIR = src
OUTDIR = bin
EXEC = $(OUTDIR)/prg
SOURCES = $(wildcard src/*.cpp)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OUTDIR)/%.o)
all: $(EXEC)
$(EXEC): $(OBJECTS)
    $(CXX) $(LNKFLAGS) $(OBJECTS) -o $(EXEC) -l boost_thread
$(OBJECTS): $(OUTDIR)/%.o : $(SRCDIR)/%.cpp
    mkdir -p $(OUTDIR)
    $(CXX) $(CXXFLAGS) -c -O3 $< -o $@
clean:
    rm -rf $(OUTDIR)
.PHONY: clean
结果:

$ make  
g++ -L cygdrive/e/boost/lib bin/test.o -o bin/prg -l boost_thread
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: cannot find -lboost_thread

怎么了?我应该指定什么?

  1. 在你的Makefile中,库的搜索路径是相对的,但在这种情况下应该是绝对的。

    LNKFLAGS = -L/cygdrive/e/boost/lib
    
  2. 检查/cygdrive/e/boost/lib是否真的包含用GCC工具链构建的Boost库。

    • libboost_thread.alibboost_thread.so均可。
    • 使用以.lib.dll结尾的Visual c++工具链构建的库将无法工作。
  3. 检查文件名是否匹配。

    • -lboost_thread要求库命名为libboost_thread.alibboost_thread.so
    • libboost_thread-mt.a或类似的不能工作