g++ 使用外部目录中的目标文件
g++ using a object file in external directory
上下文:
我目前正在学习 c/c++ 在我的 raspberry pi b+ 模型上进行编译(上周开始),但是在目标文件中使用头文件时遇到问题。
文件位置:
main.cpp-~/src/c++/projects/web_server
http_socket.o - ~/src/c++/web
g++ g++ -o webserver ~/src/c++/web/http_socket.o -std=c++0x main.cpp
的输出
main.cpp:3:25: 致命错误: http_socket.h: 没有那个文件或目录
编译终止。
main.cpp
#include "http_socket.h"
int main() { return 0; }
http_socket.cpp
#include "http_socket.h"
#include <string>
using namespace std;
http_responce::http_responce(string status_Code, string date, string server, string content_Type, string content_Length) {
Status_Code = status_Code;
Date = date;
Server = server;
Content_Type = content_Type;
Content_Length = content_Length;
}
http_socket.h
#ifndef HTTP_SOCKET_H
#define HTTP_SOCKET_H
#include <string>
using namespace std;
class http_responce
{
public:
string Status_Code;
string Date;
string Server;
string Content_Type;
string Content_Length;
http_responce(string status_Code, string date, string server, string content_Type, string content_Length);
private:
protected:
};
#endif
补充说明:
我是这门语言的新手,习惯使用IDE,所以如果有什么非常琐碎的地方我错过了,请原谅我。
尝试将 http_socket.h 文件放在您要编译的目录中。这应该是最简单的解决方案。
基本上发生的事情是编译器找不到您指定的头文件。
参考:
What is the difference between #include <filename> and #include "filename"?
就像你告诉g++
在哪里可以找到http_socket.o
目标文件一样,你需要帮助它并告诉它在哪里可以找到你的http_socket.h
头文件包括来自 main.cpp
。您可以通过将 -I
预处理器选项传递给 g++
以及包含 http_socket.h
.
的目录来执行此操作
假设 http_socket.h
与 http_socket.o
位于同一文件夹中,您将使用 -I ~/src/c++/web
以便构建 webserver
的完整命令行如下:
g++ -I ~/src/c++/web -o webserver ~/src/c++/web/http_socket.o -std=c++0x main.cpp
来自 GCC documentation:
-I
dir
Add the directory dir to the list of directories to be searched for header files. Directories named by -I
are searched before the standard system include directories. If the directory dir is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated . If dir begins with =
, then the =
will be replaced by the sysroot prefix; see --sysroot
and -isysroot
.
上下文:
我目前正在学习 c/c++ 在我的 raspberry pi b+ 模型上进行编译(上周开始),但是在目标文件中使用头文件时遇到问题。
文件位置:
main.cpp-~/src/c++/projects/web_server
http_socket.o - ~/src/c++/web
g++ g++ -o webserver ~/src/c++/web/http_socket.o -std=c++0x main.cpp
main.cpp:3:25: 致命错误: http_socket.h: 没有那个文件或目录 编译终止。
main.cpp
#include "http_socket.h"
int main() { return 0; }
http_socket.cpp
#include "http_socket.h"
#include <string>
using namespace std;
http_responce::http_responce(string status_Code, string date, string server, string content_Type, string content_Length) {
Status_Code = status_Code;
Date = date;
Server = server;
Content_Type = content_Type;
Content_Length = content_Length;
}
http_socket.h
#ifndef HTTP_SOCKET_H
#define HTTP_SOCKET_H
#include <string>
using namespace std;
class http_responce
{
public:
string Status_Code;
string Date;
string Server;
string Content_Type;
string Content_Length;
http_responce(string status_Code, string date, string server, string content_Type, string content_Length);
private:
protected:
};
#endif
补充说明:
我是这门语言的新手,习惯使用IDE,所以如果有什么非常琐碎的地方我错过了,请原谅我。
尝试将 http_socket.h 文件放在您要编译的目录中。这应该是最简单的解决方案。 基本上发生的事情是编译器找不到您指定的头文件。
参考:
What is the difference between #include <filename> and #include "filename"?
就像你告诉g++
在哪里可以找到http_socket.o
目标文件一样,你需要帮助它并告诉它在哪里可以找到你的http_socket.h
头文件包括来自 main.cpp
。您可以通过将 -I
预处理器选项传递给 g++
以及包含 http_socket.h
.
假设 http_socket.h
与 http_socket.o
位于同一文件夹中,您将使用 -I ~/src/c++/web
以便构建 webserver
的完整命令行如下:
g++ -I ~/src/c++/web -o webserver ~/src/c++/web/http_socket.o -std=c++0x main.cpp
来自 GCC documentation:
-I
dir
Add the directory dir to the list of directories to be searched for header files. Directories named by
-I
are searched before the standard system include directories. If the directory dir is a standard system include directory, the option is ignored to ensure that the default search order for system directories and the special treatment of system headers are not defeated . If dir begins with=
, then the=
will be replaced by the sysroot prefix; see--sysroot
and-isysroot
.