使用静态lib编译C ++

时间:2015-03-16 07:51:29

标签: c++ static-linking

对于你这个人来说,这可能是一个愚蠢的问题,但我没有C ++的经验。我正在使用一个开源项目osrm(非常棒)。仍然要请求路由,您已发出http请求。为了减少运行时间,我想在代码周围构建一个包装器并使用命令行调用它。所以我google了一下,发现osrm在编译项目时已经创建了一个静态库(.a文件)。我还发现了一个piece of code,它指出了构建包装器的正确方向。所以开始我构建一个简单的hello world程序(见下文),其中包含来自该静态lib的一些文件。要编译我跟着this教程。 我的目录结构如下所示: ./helloWorld.cpp ./libs/libOSRM.a

编译命令是这样的:

gcc –static helloworld.cpp –L ./libs –l libOSRM.a

它自己的代码:

#include "Router.h"
#include "boost/filesystem/path.hpp"
#include "ServerPaths.h"
#include "ProgramOptions.h"
#include <InternalDataFacade.h>
#include <viaroute.hpp>
#include <iostream.h>

main()
{
   cout << "Hello World!";
   return 0;
}

我得到的确切错误:

  

致命错误:ServerPaths.h:没有这样的文件或目录#include“ServerPaths.h”

1 个答案:

答案 0 :(得分:2)

-IPathToTheHeaderFiles添加到编译器选项中。所以它会找到要包含的文件。将PathToTheHeaderFiles替换为文件ServPaths.h所在的路径。

编辑:根据需要为其他标头文件添加尽可能多的-I

此外,阅读一本关于C ++或/和GCC manual 1

的书是值得的。

1 第3.11节将有所帮助。