Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将静态库与gnu g+链接+;:没有这样的文件或目录,Makefile_C++_Makefile_Static Linking - Fatal编程技术网

C++ 将静态库与gnu g+链接+;:没有这样的文件或目录,Makefile

C++ 将静态库与gnu g+链接+;:没有这样的文件或目录,Makefile,c++,makefile,static-linking,C++,Makefile,Static Linking,我正在使用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 = $(CIRCL

我正在使用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
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
你知道这个makefile有什么问题吗?

你最后的命令是

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 $@ $^ 

g++-o main.x。。。main.x…
看起来很奇怪。main.x依赖于main.x,而main.x显然不存在……非常感谢,我不知怎么找不到它。现在它工作了!:)