如何使用cmd链接不同目录的目标文件?

问题描述

我正在使用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.og++ -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目录(以免弄乱主项目-您不想将它们推送到存储库中,对吧?)。