【问题标题】:Compile C++ with static lib使用静态库编译 C++
【发布时间】:2015-03-16 07:51:29
【问题描述】:

这对你们来说可能是一个愚蠢的问题,但我从来没有 C++ 方面的经验。我正在使用一个开源项目osrm(太棒了)。仍然要请求路由,您必须发出 http 请求。为了减少运行时间,我想围绕代码构建一个包装器并使用命令行调用它。所以我google了一下,发现osrm在编译项目时已经创建了一个静态库(.a文件)。我还找到了piece of code,它为我指明了构建包装器的正确方向。因此,首先我构建了一个简单的 hello world 程序(见下文),其中包含来自该静态库的一些文件。编译我遵循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"

【问题讨论】:

  • 当您使用-lNAME 选项时,链接器将查找名为libNAME.a 的库,因此将您的选项更改为-lOSRM 即可找到该库。
  • 我上面的评论只是一个假设,因为你没有说你的问题是什么,或者你甚至有有问题。你的问题是什么?请详细说明!
  • 我更新了问题。抱歉,如果不清楚。我更新了我的命令,但仍然遇到同样的错误
  • @jorne 你应该给main ao int main() 添加一个返回类型,特别是因为你返回0

标签: c++ static-linking


【解决方案1】:

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

编辑:为更多的头文件添加尽可能多的-I。

另外,值得阅读一本关于 C++ 或/和GCC manual1

的书

1 3.11 节会有所帮助。

【讨论】:

  • 谢谢,这有帮助。现在编译器仍然抱怨无法找到包含在该头文件中的内容。对此有何建议?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
相关资源
最近更新 更多