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