【问题标题】:How to install third party libraries如何安装第三方库
【发布时间】:2014-03-23 10:43:07
【问题描述】:

我是 C++ 的新手,我决定尝试使用 odeint 进行一些模拟,因为 python 对我的需求来说太慢了。

我找到了我想玩的this package。我只是不完全确定如何安装或放置这些库。 C++ 有没有类似于 python 的 pip install 的东西?

旁注:我正在尝试使用 Eclipse Kepler 来执行此操作,但我并不认同这个想法。

【问题讨论】:

  • 基本上,要使用第三方库,您必须告诉编译器在哪里可以找到要包含的标头,以及在哪里可以找到要链接的库。有时您还必须正确设置某些编译器标志。如何实现这一点在 OS 和 IDE 之间存在很大差异。在 Linux 上,通常最简单的方法是通过包管理器安装库,在这种情况下,编译器可以在系统的默认位置找到文件。由于您似乎在 OSX 上,也许您可​​以使用 macports 或类似的东西安装软件包?

标签: c++ eclipse macos libraries


【解决方案1】:

我建议不要将代码放入您自己的项目中 - 这是一个相当快速和肮脏的解决方案。在 C++ 中使用库的正确方法(事实上,在我知道的任何编程语言中)是将所有库与您自己的项目分开,放在文件系统上的单独位置

然后您告诉您的环境在哪里可以找到库文件并告诉您的项目使用它们。无论您使用的是 Makefile 还是 Visual Studio 项目文件,这始终是相同的基本思想。

查看documentation of this library。它说:

odeint 是一个只有头文件的库,没有链接到预编译的代码 是必需的

这意味着我刚才提到的“库文件”只是头文件。这使您更容易,因为您不必处理链接器选项。在 C++ 中,可以找到附加(项目外部)头文件的位置通常称为“包含路径”。

因此,您的新问题应该是:如何告诉 Eclipse Kepler 我的包含路径?

将这个新问题输入 Google(如“eclipse kepler 包含路径”)会产生一些有趣的结果。它最终会引导您到Eclipse documentation about include paths,在那里您可以学习如何编辑 C++ 包含路径。

现在一切都已设置完毕,您终于可以通过如下几行代码在项目中使用该库的头文件了:

#include <boost/numeric/odeint.hpp>

你注意到&lt; &gt;了吗?它们有很大的不同,因为它们是 C++ 的表达方式,“这不是我项目的一部分,请从我的包含路径中获取”。就像作为语言一部分的标题一样(例如&lt;vector&gt;&lt;iostream&gt;)。

所有这一切一开始可能看起来很麻烦,甚至一开始你甚至可能收获甚微,但从长远来看,对于许多不同的项目和许多不同的库来说,这是防止混乱的唯一方法。

【讨论】:

  • 啊,有道理……我想。所以我要做的是#include&lt;pathtomyfile/boost/numeric/odeint.hpp&gt;。这是正确的看待它的方式吗?
  • 几乎! :) 你的包含路径应​​该指向“boost”的父目录,这样你的代码中的行就是#include
  • 我的想法是,例如,我可以获取您所有项目的代码并在我自己的机器上构建它(我可能已经将库安装在不同的位置,即使使用完全不同的编译器和操作系统)。
  • 我想我在同一页上,我只是打错了,我的意思是#include&lt;pathtoBOOSTfile/boost/numeric/odeint.hpp&gt;,对吧?
  • Nono,没有“pathtoBOOSTfile”部分。只需#include 。不多也不少。查看库文档中链接的示例:github.com/headmyshoulder/odeint-v2/blob/master/libs/numeric/…。您的目标是设置 Eclipse,以便编译器在您编写 #include 时会找到该文件。或者也许我误解了你的问题......
【解决方案2】:

由于 odeint 是一个只有标头的库,您可以将其与您自己的源代码一起放置。只需将 odeint 的 boost 目录复制到您的 main.cpp 所在的位置(假设您有一个 main.cpp,但您应该明白):

your_sources/
    main.cpp
    boost/
        numeric/
            odeint/
            odeint.hpp

现在您可以通过包含来使用该库

#include "boost/numeric/odeint.hpp"

【讨论】:

  • 好的,我明白了。我的路径(至少在我可以看到其他“正常”库的地方)/usr/lib/c++/v1。我只是把目录放在那里。就这样总结了吗?我希望有一种更自动化的方式来做到这一点,但这很好。
  • 是的,你可以这样做。但是在系统中手动放置库通常不是一个好主意,因为它们可能会干扰包管理器。 (不过,我不了解 OSX)
猜你喜欢
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
相关资源
最近更新 更多