0

を使用していくつかのコードをコンパイルした後Makefile、実行しようとすると次のようになります。

$ ./libbookgui.a
./libbookgui.a: line 1: syntax error near unexpected token `newline'
./libbookgui.a: line 1: `!<arch>'

にはMakefile以下の内容があります。

INCLUDES = -I"$(FLTK)"
LIBS     = -lstdc++
CXXFLAGS = $(INCLUDES) -Wall -time -O3 -DNDEBUG -Wno-deprecated
LIBFLAGS = 
AR       = ar

.SUFFIXES: .cpp .o

# Create a list of source files.
SOURCES  = $(shell ls *.cpp)
# Create a list of object files from the source file lists.
OBJECTS = ${SOURCES:.cpp=.o}     
# Create a list of targets.
TARGETS = libbookgui.a

# Build all targets by default
all:    $(TARGETS)

%.a: $(OBJECTS)
    $(AR) rcs $@ $(OBJECTS)

# A rule to build .o file out of a .cpp file
%.o: %.cpp 
    $(CXX) $(CXXFLAGS) -o $@ -c $<

# A rule to clean all the intermediates and targets
clean:  
    rm -rf $(TARGETS) $(OBJECTS) *.out *.stackdump

TARGETS = libbookgui.a行があり、コンパイラはファイルを作成するだけでエラーを返さないことがわかり.aます。

何か案は?

4

2 に答える 2

1

libbookgui.aスタティック ライブラリです (複数のオブジェクト ファイルをまとめたものです)。

ライブラリではなく、実行可能ファイルを実行することになっています。このライブラリを実行可能ファイルにリンクし、それを実行ます。

この記事を読むことをお勧めします。

于 2012-04-26T12:26:45.310 に答える
0

リンク行を追加するには、メイクファイルに加えた変更を表示するように投稿を更新する必要があります。それがなければ、問題のその部分について実際にお手伝いすることはできません.

エラーに基づいて、リンクに適切なツールを使用していない可能性があります。「gcc」(C コンパイラ フロントエンド) を使用しているか、リンカを直接呼び出そうとしています。アプリケーションをリンクするときは、C++ コンパイラを使用する必要があります (この場合は$(CXX))。も指定する必要はありません-lstdc++。C++ フロントエンドが自動的にリンク行に追加するからです。

于 2012-04-26T13:43:21.657 に答える