将静态库与gnu g 链接:没有这样的文件或目录,makefile
Linking static library with gnu g++: No such file or directory, Makefile
我正在使用makefile来编译我的简单应用程序。在这里是:
CURRDIR = `basename $(PWD)`
MAINAPP = main
SECTION = section
POINT = point
FIGURE = figure
CIRCLE = circle
TRIANGLE = triangle
RECTANGLE = rectangle
MAINSRC = $(MAINAPP).cpp
SECTIONSRC = $(SECTION).cpp
CIRCLESRC = $(CIRCLE).cpp
TRIANGLESRC = $(TRIANGLE).cpp
RECTANGLESRC = $(RECTANGLE).cpp
MAINKOM = $(MAINAPP).o
SECTIONKOM = $(SECTION).o
CIRCLEKOM = $(CIRCLE).o
TRIANGLEKOM = $(TRIANGLE).o
RECTANGLEKOM = $(RECTANGLE).o
SECTIONHEADER = $(SECTION).h
POINTHEADER = $(POINT).h
CIRCLEHEADER = $(CIRCLE).h
TRIANGLEHEADER = $(TRIANGLE).h
RECTANGLEHEADER = $(RECTANGLE).h
FIGUREHEADER = $(FIGURE).h
MAINEXE = $(MAINAPP).x
COMPILER = g++
COMPILERCOPTIONS = -Wall -c
LINKER = $(COMPILER)
LINOP = -Wall
BIBSTAT = libfigures.a
BIBKOM = section.o triangle.o rectangle.o circle.o
AR = ar
AROP = rv
$(BIBSTAT): $(BIBKOM)
$(AR) $(AROP) $@ $?
all: $(MAINEXE)
$(SECTIONKOM): $(SECTIONSRC)
$(COMPILER) $(COMPILERCOPTIONS) $(SECTIONSRC)
$(CIRCLEKOM): $(CIRCLESRC)
$(COMPILER) $(COMPILERCOPTIONS) $(CIRCLESRC)
$(TRIANGLEKOM): $(TRIANGLESRC)
$(COMPILER) $(COMPILERCOPTIONS) $(TRIANGLESRC)
$(RECTANGLEKOM): $(RECTANGLESRC)
$(COMPILER) $(COMPILERCOPTIONS) $(RECTANGLESRC)
$(MAINKOM): $(MAINSRC) $(SECTIONHEADER) $(POINTHEADER) $(CIRCLEHEADER) $(TRIANGLEHEADER) $(RECTANGLEHEADER) $(FIGUREHEADER)
$(COMPILER) $(COMPILERCOPTIONS) $(MAINSRC)
$(MAINEXE): $(MAINKOM) $(SECTIONKOM) $(CIRCLEKOM) $(TRIANGLEKOM) $(RECTANGLEKOM) $(BIBSTAT)
$(LINKER) -o $@ $(LINOP) $^ $(MAINEXE) $(MAINKOM) $(SECTIONKOM) $(CIRCLEKOM) $(TRIANGLEKOM) $(RECTANGLEKOM)
run: $(MAINEXE)
./$(MAINEXE)
clean:
rm -f a.out *~ *.o *.x
tar: clean
(cd ..; tar cvzf $(CURRDIR).tar.gz $(CURRDIR); ls -altr)
但是,我似乎在链接静态库时有问题。这是执行make all
之后的输出:
$ make all
g++ -Wall -c main.cpp
g++ -Wall -c section.cpp
g++ -Wall -c circle.cpp
g++ -Wall -c triangle.cpp
g++ -Wall -c rectangle.cpp
ar rv libfigures.a section.o triangle.o rectangle.o circle.o
ar: creating libfigures.a
a - section.o
a - triangle.o
a - rectangle.o
a - circle.o
g++ -o main.x -Wall main.o section.o circle.o triangle.o rectangle.o libfigures.a main.x main.o section.o circle.o triangle.o rectangle.o
g++: error: main.x: No such file or directory 1
make: *** [main.x] Error 1
有什么想法我对此做错了什么?
您的最终命令是
g++ -o main.x -Wall main.o section.o circle.o triangle.o rectangle.o
libfigures.a main.x main.o section.o circle.o triangle.o
rectangle.o
这里发生了太多事情:您(1)重复每个对象两次(2)使用对象和由它们构建的库(3)使用输入文件列表中的输出文件。
应该是
g++ -o main.x main.o libfigures.a
您可能需要像这样修改Makefile规则:
$(MAINEXE): $(MAINKOM) $(BIBSTAT)
$(LINKER) -o $@ $^
相关文章:
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- Arduino-Makefile:编译器无法编译用户库 cpp 文件
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 如何在makefile中包含tensorflow c ++".so"文件?
- 有没有办法从Makefile访问VS Code c_cpp_properties.json文件中的定义
- 在Windows上运行Linux Makefile(.so文件)
- 为简单的src,include,libs文件夹项目编写Makefile
- 如何从 Makefile 中的其他目录导入所有源代码和头文件
- 使用 g++ 和 Makefile 编译 c++ 时可执行文件非常大
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- makefile和错误将与大型项目分开的文件编译
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- makefile 没有将 .o 和可执行文件放在各自的 obj 和 bin 目录中
- 如何仅重新编译makefile中更改的内容,自动查找.cpp文件?
- Arduino Makefile:如何将传感器数据保存到计算机中的文件中
- 使用GCC的C makefile - 从子文件夹列表中生成源文件列表
- 自动工具: Makefile.am:如果文件存在,则链接
- 您可以使用 makefile 从 .o 对象文件创建 C++ 文件吗?
- 多个文件Makefile编译
- 一个文件Makefile问题:C++