对子目录中类的未定义引用

Undefined reference to classes in subdirectories

本文关键字:未定义 引用 子目录      更新时间:2023-10-16

我在编译我的项目时遇到问题。我有一个目录结构如下:

main/
|--common/
|    |-----lib/
|    |      |----> help.o
|    |---- help.cpp
|    |---- help.h
|    |---- makefile
|--prog/
|    |-----bin/
|    |      |----> progMain
|    |-----lib/
|    |      |----> main.o
|    |---- main.cpp
|    |---- makefile
|-- makefile

主生成文件首先编译通用代码,然后在 prog 中编译代码。编译步骤工作正常。问题是我得到链接器抱怨undefined reference to Help:: ...主要的.cpp将其包含在#include "common/help.h"prog/makefile 中用于构建可执行文件的行是

g++ -o bin/progMain lib/main.o -L../common/lib/

我只是无法让链接器在帮助类中找到代码。我试过了

g++ -o bin/progMain lib/main.o ../common/lib/*.o
g++ -o bin/progMain lib/main.o -I../common/lib/
g++ -o bin/progMain lib/main.o -I../common/ -L../common/lib/
g++ -o bin/progMain lib/main.o -l../common/lib/help.o

但这些都无济于事。始终相同的未定义引用错误。 另请注意,这是一个简化的示例,common/prog/中都有多个类

您应该首先创建对象模块库:

ar -crs ../common/lib/libhelp.a ../common/lib/help.o

然后,您应该使用此库来链接可执行文件:

g++ -o bin/progMain lib/main.o -L../common/lib/ -lhelp