文件格式无法识别;作为链接描述文件处理

时间:2014-07-09 23:32:02

标签: c++ linker makefile g++

我正在尝试使用此make文件编译和我的项目:

GLFLAGS=-lGL -lGLU -lX11 -lXxf86vm -lXrandr -lpthread -lxi
CC=g++

window.o: window.h window.cpp
    $(CC) -c $< -o $@ $(GLFLAGS)
main.o: window.h main.cpp
   $(CC) -c $< -o $@ $(GLFLAGS)
all: window.o main.o
   $(CC) $^ -o main

但是我收到了这个错误:

/usr/bin/ld:window.o: file format not recognized; treating as linker script
/usr/bin/ld:window.o:1: syntax error
collect2: error: ld returned 1 exit status

main.cpp和window.cpp都依赖于我在window.h中创建的类。

1 个答案:

答案 0 :(得分:1)

您的旗帜未在正确的位置使用。 -l标志是链接器标志,仅在链接时使用。

使用正确的变量,并添加一些以澄清,您可以将您的makefile更改为:

EXE     :=  main
SRC     :=  main.cpp window.cpp
OBJ     :=  $(SRC:.cpp=.o)
LDLIBS  :=  -lGL -lGLU -lX11 -lXxf86vm -lXrandr -lpthread -lxi

.PHONY: all

all:    $(EXE)

$(EXE): $(OBJ)
    $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

如果您需要生成自动依赖关系,请添加以下内容:

EXE     :=  main
SRC     :=  main.cpp window.cpp
OBJ     :=  $(SRC:.cpp=.o)
DEP     :=  $(OBJ:.o=.d)

LDLIBS      :=  -lGL -lGLU -lX11 -lXxf86vm -lXrandr -lpthread -lxi
CPPFLAGS    :=  -MMD -MP

.PHONY: all

all:    $(EXE)

$(EXE): $(OBJ)
    $(CXX) $(LDFLAGS) $^ $(LDLIBS) -o $@

-include $(DEP)