链接具有依赖项的对象
Link object with dependencies
我的项目树:
./main.h
./main.cpp
./Makefile
./sources/myclass.cpp
./includes/myclass.h
./objects/
#./Makefile
BUILD = myexecutable
LDFLAGS = -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system
CXXFLAGS = -Wall
RM = rm -rf
OBJECTS = main.o $(addprefix $(OBJ_DIR), myclass.o)
OBJ_DIR = objects/
SRC_DIR = sources/
.PHONY: clean
all: clean $(BUILD)
$(BUILD): $(OBJECTS)
$(CXX) $(LDFLAGS) -o $(BUILD) $(OBJECTS)
$(OBJ_DIR)%.o: $(SRC_DIR)%.cpp
$(CXX) -MM $(CXXFLAGS) -c $< > $(OBJ_DIR)$*.d # New line for create myclass.d
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
$(RM) $(BUILD) $(OBJ_DIR)*.o
当我尝试运行make
时,我得到的是:
$ make
rm -rf myexecutable objects/*.o
g++ -MMD -Wall -c sources/myclass.cpp -o objects/myclass.o
g++ -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system -o myexecutable main.o objects/myclass.o
main.o: In function `main':
main.cpp:(.text+0x176): undefined reference to `mynamespace::MyClass::method()'
main.cpp:(.text+0x185): undefined reference to `mynamespace::MyClass::otherMethod()'
main.cpp:(.text+0x406): undefined reference to `mynamespace::MyClass::~MyClass()'
main.cpp:(.text+0x50e): undefined reference to `mynamespace::MyClass::~MyClass()'
collect2: ld devolvió el estado de salida 1
make: *** [myexecutable] Error 1
如何修复myclass.o的main.o依赖关系
编辑
我为创建*.d依赖项*.d文件添加了一行,因为我不知道如何使用
更正为:
LIBES = -lsfml-graphics -lsfml-window -lsfml-audio -lsfml-system
$(BUILD): $(OBJECTS)
$(CXX) -o $(BUILD) $(OBJECTS) $(LIBES)
LIBES
应取代LDFLAGS
,BUILD
的两行应更改。
链接的顺序很重要:先放对象文件,然后把库从高级系统库放到最低级别系统库。
相关文章:
- 对在不同二进制文件中创建的对象文件的依赖关系
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 涉及全局对象的循环依赖C++
- 类成员和依赖项注入的对象与引用
- 正确构造和销毁 Setter 依赖注入对象(可能使用 qt)
- 如何从依赖于设备的 HBITMAP 构造 GDI+ 位图对象
- 简短的解决方案是对对象的C 向量相互依赖
- 如果 LTO 中的代码依赖于其构造的副作用,是否允许 LTO 删除未使用的全局对象?
- 当删除部分依赖列表时,GNU make 对每个对象文件使用相同的源文件
- 将依赖项添加到现有共享对象库
- OOP设计:一个对象依赖于其所有依赖项的存在
- 维护C++对象,使用依赖于UI的方法
- 通过包装器对象的构造函数将依赖关系传递给包装器对象
- 依赖静态对象地址安全吗
- 如何将相互依赖的对象移动到一起并维护内部引用
- 如何强制依赖静态对象(包括模板成员)的初始化顺序
- 如何在C++中强制在另一个对象(依赖于它)中实例化一个对象
- 对象依赖关系和处理其中一个不再存在的情况
- c++共享对象依赖关系
- c++使对象依赖于其他对象是一种好的设计