我正在尝试使用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
怎么了?我应该指定什么?
答案 0 :(得分:0)
在您的Makefile中,库搜索路径是相对的,但在这种情况下应该是绝对的。
LNKFLAGS = -L/cygdrive/e/boost/lib
检查/cygdrive/e/boost/lib
是否真的包含使用GCC工具链构建的Boost库。
libboost_thread.a
或libboost_thread.so
将起作用。.lib
或.dll
结尾的Visual C ++工具链构建的库将不起作用。检查文件名是否匹配。
-lboost_thread
要求该库的名称为libboost_thread.a
或libboost_thread.so
。libboost_thread-mt.a
等无效。您可能会发现我的answer to a related question有用。