如何使用cmd link object 不同目录的文件?

how to link object file of different directory using cmd?

我正在使用 windows 和 mingw。 这是我的程序看起来像

helloworld
|---include
|   |---header1
|       |---headerA.cpp
|       |---headerA.h
|       |---headerA.o
|---main.cpp
|---main.o

我通过命令成功包含 header#include"header1/headerA.h"g++ -c main.cpp -I.\include 但是当我尝试使用命令 link main.oheaderA.o 时:g++ -o main main.o -I.\include\header1\*.o 我尝试了很多命令但出现错误:main.o:main.cpp:(.text+0x35): 未定义对“foo()”的引用 collect2.exe: 错误:ld 返回 1 退出状态。请告诉我怎样才能正确地link他们。我不想包括 header,例如 #include"C:/../headerA.h"

根据 gcc documentation-I 标志用于传递编译器将查找 headers 的包含目录。您的错误是 linker 错误。这意味着您正确编译了翻译单元,但是当 linker 尝试解析符号时,它找不到定义。 Headers 只包含声明,不包含“肉”。

您只需列出您想要 link 的所有 .o 文件: g++ main.o ./include/header1/headerA.o -o main

作为旁注您不应该将 .o 文件放在项目的 /include 目录中。最好,您应该为 object 文件创建一个专用的 /build 目录(以免弄乱主项目 - 您不想将它们推送到存储库,对吧?)。