g++ 包含其他目录中的文件
g++ include files in other directories
我在名为 test 的目录中有一个 main.cpp 文件,其中包含一个
#include "INIReader.h"
文件结构如下
---/test/main.cpp
---/inih/ini.h
ini.c
---/inih/cpp/INIReader.h
INIReader.cpp
INIReader.cpp 有这些包括
#include "../ini.h"
#include "INIReader.h"
我正在尝试用
在一行中编译 main.cpp
g++ -o test -Wall -I../inih/cpp main.cpp
但它不起作用。类似
的错误
> Undefined symbols for architecture x86_64:
>... REFERENCES TO stuff in INIReader ...
>ld: symbol(s) not found
> for architecture x86_64 clang: error: linker command failed with exit
> code 1 (use -v to see invocation)
现身。
现在我正在通过 运行 命令进行编译,它会起作用。
> g++ -c -Wall ../inih/cpp/INIReader.cpp
> g++ -c -Wall ../inih/ini.c
> g++ -c -Wall -I../inih/cpp main.cpp
> g++ -o configtest main.o INIReader.o ini.o
我认为 g++ 编译器会在每个默认包含目录和传递的 -I 目录中查找每个 #include 并且不知道为什么上面的一个衬里会不行。 g++ "follow" 会包含在所有文件中,例如 ./ini.h 吗?我一直没能找到学习这个的好资源。
我怎样才能像上一个命令一样将这些命令组合成一行?谢谢。
编辑:
我查看了 "duplicate" 问题,但不明白它与我的问题有什么关系。我正在尝试找到一个很好的资源来学习如何使用 g++ 正确 "include" 并知道为什么我当前的一个衬垫不起作用。
不是代码的问题,编译成功,然后一一链接!
重复问题类似,但未涵盖包含其他目录中的文件。
您收到的错误来自链接器步骤,而不是编译器步骤。它与您的包含没有任何关系。您需要告诉链接器制作目标二进制文件所需的所有文件。正如 this answer 中所说,这可能是之前作为副本关闭的问题,您只需要在命令行中列出 main 之后的所有 cpp 文件。所以对于你来说,命令行应该是这样的:
g++ -o configtest -Wall -I../inih/cpp main.cpp ../inih/cpp/INIReader.cpp ../inih/ini.c
一旦开始一步编译所有文件,您可能需要添加额外的包含指令以在不同路径中查找 header 文件,因此您的命令行可能需要:
g++ -o configtest -Wall -I../inih/cpp -I../inih main.cpp ../inih/cpp/INIReader.cpp ../inih/ini.c
但这取决于您如何从源文件中包含 header...
我在名为 test 的目录中有一个 main.cpp 文件,其中包含一个
#include "INIReader.h"
文件结构如下
---/test/main.cpp
---/inih/ini.h
ini.c
---/inih/cpp/INIReader.h
INIReader.cpp
INIReader.cpp 有这些包括
#include "../ini.h"
#include "INIReader.h"
我正在尝试用
在一行中编译 main.cppg++ -o test -Wall -I../inih/cpp main.cpp
但它不起作用。类似
的错误> Undefined symbols for architecture x86_64:
>... REFERENCES TO stuff in INIReader ...
>ld: symbol(s) not found
> for architecture x86_64 clang: error: linker command failed with exit
> code 1 (use -v to see invocation)
现身。
现在我正在通过 运行 命令进行编译,它会起作用。
> g++ -c -Wall ../inih/cpp/INIReader.cpp
> g++ -c -Wall ../inih/ini.c
> g++ -c -Wall -I../inih/cpp main.cpp
> g++ -o configtest main.o INIReader.o ini.o
我认为 g++ 编译器会在每个默认包含目录和传递的 -I 目录中查找每个 #include 并且不知道为什么上面的一个衬里会不行。 g++ "follow" 会包含在所有文件中,例如 ./ini.h 吗?我一直没能找到学习这个的好资源。 我怎样才能像上一个命令一样将这些命令组合成一行?谢谢。
编辑:
我查看了 "duplicate" 问题,但不明白它与我的问题有什么关系。我正在尝试找到一个很好的资源来学习如何使用 g++ 正确 "include" 并知道为什么我当前的一个衬垫不起作用。 不是代码的问题,编译成功,然后一一链接!
重复问题类似,但未涵盖包含其他目录中的文件。
您收到的错误来自链接器步骤,而不是编译器步骤。它与您的包含没有任何关系。您需要告诉链接器制作目标二进制文件所需的所有文件。正如 this answer 中所说,这可能是之前作为副本关闭的问题,您只需要在命令行中列出 main 之后的所有 cpp 文件。所以对于你来说,命令行应该是这样的:
g++ -o configtest -Wall -I../inih/cpp main.cpp ../inih/cpp/INIReader.cpp ../inih/ini.c
一旦开始一步编译所有文件,您可能需要添加额外的包含指令以在不同路径中查找 header 文件,因此您的命令行可能需要:
g++ -o configtest -Wall -I../inih/cpp -I../inih main.cpp ../inih/cpp/INIReader.cpp ../inih/ini.c
但这取决于您如何从源文件中包含 header...