g ++使用外部目录中的目标文件

时间:2015-07-24 02:51:52

标签: c++ g++ raspberry-pi header-files object-files

上下文

我目前在我的覆盆子pi b +模型(上周开始)上学习c / c ++编译,但在目标文件中使用头文件时遇到了麻烦。

文件位置:

main.cpp - 〜/ src / c ++ / projects / web_server

http_socket.o - 〜/ src / c ++ / web

g++ -o webserver ~/src/c++/web/http_socket.o -std=c++0x main.cpp

的g ++输出

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,所以请原谅我,如果这是我错过的非常微不足道的事情。

2 个答案:

答案 0 :(得分:0)

尝试将http_socket.h文件放在您要编译的目录中。这应该是最简单的解决方案。 基本上发生的事情是编译器找不到你指定的头文件。

参考:

What is the difference between #include <filename> and #include "filename"?

答案 1 :(得分:0)

正如您告诉g++在哪里找到http_socket.o目标文件一样,您需要帮助它并告诉它在哪里可以找到您所包含的http_socket.h头文件main.cpp。您可以通过将-I预处理程序选项传递给包含g++的目录的http_socket.h来执行此操作。

假设http_socket.hhttp_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

     

将目录 dir 添加到要搜索头文件的目录列表中。在标准系统包含目录之前搜索由-I命名的目录。如果目录 dir 是标准系统包含目录,则忽略该选项以确保系统目录的默认搜索顺序和系统标头的特殊处理不会失败。如果 dir =开头,则=将替换为sysroot前缀;请参阅--sysroot-isysroot