C++ 使用MingW和makefile时如何链接库
我使用MingW和cmake下载并构建了FLTK(1.3.4.1版),这两个版本运行得非常好。 然而,我在正确地链接FLTK时遇到了问题,导致链接过程中出现了大量未定义的引用。 我没有安装MSYS或任何其他Windows shell,这意味着使用“fltk config”脚本不是一个选项 我对makefiles的了解非常少,下面是使用官方文档和各种互联网资源构建的C++ 使用MingW和makefile时如何链接库,c++,makefile,mingw,linker-errors,fltk,C++,Makefile,Mingw,Linker Errors,Fltk,我使用MingW和cmake下载并构建了FLTK(1.3.4.1版),这两个版本运行得非常好。 然而,我在正确地链接FLTK时遇到了问题,导致链接过程中出现了大量未定义的引用。 我没有安装MSYS或任何其他Windows shell,这意味着使用“fltk config”脚本不是一个选项 我对makefiles的了解非常少,下面是使用官方文档和各种互联网资源构建的 CC=g++ FLTK_INC=C:/frameworks/fltk-1.3.4-1 FLTK_BIN=C:/frameworks/
CC=g++
FLTK_INC=C:/frameworks/fltk-1.3.4-1
FLTK_BIN=C:/frameworks/fltk-1.3.4-1/bin
CFLAGS=-std=c++11 -Wall -I$(FLTK_INC) -v
LDFLAGS=-L$(FLTK_BIN)/lib
LDLIBS=-lfltk
EXT=cc
SOURCES=$(wildcard src/*.$(EXT))
OBJECTS=$(SOURCES:.$(EXT)=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.$(EXT).o:
$(CC) $(CFLAGS) $< -o $@
CC=g++
FLTK_INC=C:/frameworks/FLTK-1.3.4-1
FLTK_BIN=C:/frameworks/FLTK-1.3.4-1/BIN
CFLAGS=-std=c++11-Wall-I$(FLTK_INC)-v
LDFLAGS=-L$(FLTK_-BIN)/lib
LDLIBS=-lfltk
EXT=cc
SOURCES=$(通配符src/*.$(EXT))
对象=$(源:.$(外部)=.o)
可执行文件=你好
全部:$(源)$(可执行)
$(可执行文件):$(对象)
$(CC)$(LDFLAGS)$(对象)-o$@
.$(分机)o:
$(CC)$(CFLAGS)$<-o$@
这个makefile是否有明显的错误,或者错误是否存在于其他地方
这个makefile是否有明显的错误,或者错误是否存在于其他地方
这个makefile有两个问题
事情1
LDFLAGS=-L$(FLTK_BIN)/lib
LDLIBS=-lfltk
您有传统的GNU链接选项设置:
LDFLAGS=-L$(FLTK_BIN)/lib
$(LDFLAGS)
应出现在链接中的适当位置
告诉链接器它应该在目录中搜索的方法
$(FLTK_-BIN)/lib
用于使用-l
选项(之前)指定的任何库
在其默认目录中搜索)
$(LDLIBS)
应出现在链接中的适当位置
告诉链接器它应该链接共享库libfltk.so
否则,静态库libfltk.a
。(在Windows、其他扩展上)
(已接受)
您的链接配方:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
在适当的位置有$(LDFLAGS)
,但没有$(LDLIBS)
在任何地方因此,链接器不会尝试链接libfltk
。
这很可能解释了您提到的未定义的引用错误,
虽然我不能绝对肯定,因为你还没有透露它们是什么
链接配方应为:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@ $(LDLIBS)
或者更传统地说:
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $^ -o $@ $(LDLIBS)
事情2
您的编译配方:
.$(EXT).o:
$(CC) $(CFLAGS) $< -o $@
$(CC) $(CFLAGS) $< -o $@
是“编译”配方的替换实例:
要更正编译配方,请执行以下操作:
$(CC) $(CFLAGS) $< -c -o $@
$(CC)$(CFLAGS)$<-c-o$@
很好。遵循了你明智的建议,但错误仍然很多。请参阅@slimandstacked。请发布失败make的完整输出,而不仅仅是错误。谢谢,这修复了makefile问题。fltk需要很多其他LIB才能正常工作,但这超出了这个问题的范围。
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
$(CC) $(CFLAGS) $< -c -o $@