在cygwin下链接makefile中的boost库

时间:2014-06-08 12:45:24

标签: c++ boost linker makefile cygwin

我正在尝试使用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 个答案:

答案 0 :(得分:0)

  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等无效。
  4. 您可能会发现我的answer to a related question有用。