问题描述
我正在使用Windows和mingw。 这是我的程序,就像
helloworld
|---include
| |---header1
| |---headerA.cpp
| |---headerA.h
| |---headerA.o
|---main.cpp
|---main.o
我用逗号成功地包含了标题#include"header1/headerA.h"
:g++ -c main.cpp -I.\include
但是,当我尝试使用命令main.o
链接headerA.o
和g++ -o main main.o -I.\include\header1\*.o
时,我尝试了许多命令,但收到错误消息: main.o:main.cpp :(。text + 0x35 ):对``foo()'的未定义引用
collect2.exe:
错误:ld返回1个退出状态。请告诉我如何正确链接它们。我不想包含#include"C:/../headerA.h"
之类的标题。
解决方法
根据gcc documentation,-I
标志用于传递包含目录,编译器将在其中查找标头。您的错误是链接器错误。这意味着您正确编译了翻译单元,但是当链接器尝试解析符号时,它找不到定义。标头仅包含声明,而不包含“肉”。
您只需列出所有要链接在一起的.o文件:
g++ main.o ./include/header1/headerA.o -o main
作为旁注,您不应将.o文件放在项目的/ include目录中。最好,您应该为目标文件创建一个专用的/ build目录(以免弄乱主项目-您不想将它们推送到存储库中,对吧?)。