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++编译器会在每个默认的include目录和传入的-I目录中查找每个#include,不知道为什么上面的一行不能工作。g++ "follow"是否包含在所有文件中,比如./ini.h?我还没能找到一个好的资源来学习这个。如何像前面的命令一样将这些命令合并到一行中?谢谢。
编辑:我看了"重复"的问题,但不明白它与我的问题有什么关系。我试图找到一个很好的资源来学习如何正确地"包含"g++,并知道为什么我目前的一行不能工作。这在代码中不是问题,因为编译然后逐一链接是成功的!
Duplicate问题与此类似,但不包括包括其他目录下的文件。
您得到的错误来自链接器步骤,而不是编译器步骤。这和你的包没有任何关系。您需要告诉链接器生成目标二进制文件所需的所有文件。正如在这个答案中所说的,这可能是之前作为副本关闭的问题,您只需要在命令行中列出main之后的所有cpp文件。因此,对于您的命令行,应该是这样的:
g++ -o configtest -Wall -I../inih/cpp main.cpp ../inih/cpp/INIReader.cpp ../inih/ini.c
一旦您开始在一个步骤中编译所有文件,您可能必须添加一个额外的include指令来查找不同路径中的头文件,因此您的命令行可能需要是:
g++ -o configtest -Wall -I../inih/cpp -I../inih main.cpp ../inih/cpp/INIReader.cpp ../inih/ini.c
但这取决于你如何从源文件中包含你的头文件…
相关文章:
- 读取大文件(>2GB)(文本文件包含以太网数据)并通过不同参数随机访问数据的最佳方法是什么?
- C++文件包含多行
- CMake 如何强制third_party库将项目文件包含在当前项目源目录中?
- 是否可以将要"ShellExecute"的文件包含在 dll 中?如果是这样,"ShellExecute"中的文件位置应该是什么?
- C++ 逐行从文件(包含空格)读取数据
- 在 C++ 中,.h 文件包含文件但不起作用
- 生成的资源文件包含奇怪的包含文件
- 可变参数类的文件包含问题
- 为什么文件命令声明可执行文件包含"debug_info"
- 可以将标头文件包含在多个源文件中,而无需重复保护
- 为什么将.HPP文件包含在.h文件中
- Qt C++:将所有库文件包含在项目文件夹中
- 有条件地将文件包含在C++标头中
- 将多个原型文件包含在一个项目中会导致protobuf_AssignDescriptorsOnce()已经有一个主体
- 有没有办法将文件包含在C++中的所有项目文件中
- 将外部.asm文件包含到C++代码中
- 什么是"pch.h",为什么需要将其作为第一个头文件包含在内?
- 该头文件包含DirectX 12中的ThrowIfFailed()
- QT C :函数的多个定义当Header文件包含在MainWindow.h中时
- QT创建者错误地处理标头文件包含来自Directory