编译C++;使用静态库 这可能对你来说是个愚蠢的问题,但是我对C++没有什么经验。我正在使用一个开源项目(非常棒)。仍然要请求路由,您必须发出http请求。为了减少运行时间,我想围绕代码构建一个包装器,并使用命令行调用它。所以我在谷歌上搜索了一下,发现osrm在编译项目时已经创建了一个静态库(.a文件)。我还发现了一个可以为我指明构建包装器的正确方向的方法。因此,首先,我构建了一个简单的hello world程序(见下文),其中包含来自该静态库的一些文件。为了编译,我遵循了教程。 我的目录结构如下所示: ./helloWorld.cpp /libs/libOSRM.a

编译C++;使用静态库 这可能对你来说是个愚蠢的问题,但是我对C++没有什么经验。我正在使用一个开源项目(非常棒)。仍然要请求路由,您必须发出http请求。为了减少运行时间,我想围绕代码构建一个包装器,并使用命令行调用它。所以我在谷歌上搜索了一下,发现osrm在编译项目时已经创建了一个静态库(.a文件)。我还发现了一个可以为我指明构建包装器的正确方向的方法。因此,首先,我构建了一个简单的hello world程序(见下文),其中包含来自该静态库的一些文件。为了编译,我遵循了教程。 我的目录结构如下所示: ./helloWorld.cpp /libs/libOSRM.a,c++,static-linking,C++,Static Linking,编译的命令如下: 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> #in

编译的命令如下:

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;
}
#包括“Router.h”
#包括“boost/filesystem/path.hpp”
#包括“serverpath.h”
#包括“ProgramOptions.h”
#包括
#包括
#包括
main()
{

无法将
-ipathTotheHeaderFile
添加到编译器选项中。这样它将找到要包含的文件。将PathTotheHeaderFile替换为文件ServPaths.h所在的路径

编辑:添加更多头文件所需的
-I

另外,读一本关于C++和/或1

的书是值得的。
1第3.11节将有所帮助。

当您使用
-lNAME
选项时,链接器将查找名为
libNAME.a
的alibrary,因此将您的选项更改为
-lOSRM
,库将被找到。我上面的评论只是一个假设,因为您没有说明您的问题是什么,或者您甚至没有问题。您的问题是什么操作?请详细说明!我更新了问题。如果不清楚,很抱歉。我更新了命令,但仍然得到相同的结果error@jorne您可能应该向
main
ao
intmain()添加一个返回类型
特别是因为您返回了0感谢,这很有帮助。但现在编译器仍抱怨无法找到该头文件中包含的内容。对此有什么建议吗?