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

问题描述 投票:0回答:1

我正在尝试使用此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中创建的类。

c++ linker makefile g++
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.