C++ 链接cygwin下makefile中的boost库

C++ 链接cygwin下makefile中的boost库,c++,boost,linker,makefile,cygwin,C++,Boost,Linker,Makefile,Cygwin,我正在尝试使用带有cygwin的makefile将我的程序与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 = $(OUTD

我正在尝试使用带有cygwin的makefile将我的程序与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
怎么了?我应该具体说明什么

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

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

    • libboost_线程。一个
      libboost_线程。因此
      可以工作
    • 用VisualC++工具库构建的,使用<代码> > LIB <代码> >代码>。DLL< /C> >不工作。
  • 检查文件名是否匹配

    • -lboost\u thread
      要求将库命名为
      libboost\u thread.a
      libboost\u thread.so
    • libboost\u thread-mt.a
      或类似工具将不起作用
  • 你会发现我的建议很有帮助


  • 你是如何建立你的图书馆的?你看到任何
    libboost_-thread-xxx
    库了吗?我有libboost_-thread-vc120-mt-1_55.lib和libboost_-thread-vc120-mt-gd-1_55.lib,它们在E:\boost\lib中看起来像是使用Microsoft Visual Studio构建的,但你正在链接其他。仍然没有回答,没有windows boost用户?我在win7上使用boost1.64,cygwing++5.4x64,同样的错误。我的g++标志是-ic:/tools/boost/boost164/和-Lc:/tools/boost/boost164/libs,我可以看到c:/tools/boost/boost164/stage/lib/libboost\u thread.a;我用C:\tools\boost\boost164>bootstrap.sh gcc&&b2.exe安装了boost1.64.7z。。58次失败,更新了1123个目标。@mosh您的
    -L
    选项至少应该是
    -LC:\tools\boost\boost164\stage\lib
    LNKFLAGS = -L/cygdrive/e/boost/lib