关于 C++/Boost 的真正基础 - 测试提升

Posted

技术标签:

【中文标题】关于 C++/Boost 的真正基础 - 测试提升【英文标题】:Really basic about C++/Boost - testing boost 【发布时间】:2013-04-23 02:05:55 【问题描述】:

我认为我已经正确安装了 boost,所以我尝试使用 here 找到的测试“first.cpp”:

#include<iostream>
#include<boost/any.hpp>

int main()

    boost::any a(5);
    a = 7.67;
    std::cout<<boost::any_cast<double>(a)<<std::endl;

我得到以下信息:

Jason@ITHAKA-DB44CFE1 /home/jason
$ g++ -o first first.cpp
first.cpp:2:24: boost/any.hpp: No such file or directory
first.cpp: In function `int main()':
first.cpp:6: error: `boost' has not been declared
first.cpp:6: error: `any' undeclared (first use this function)
first.cpp:6: error: (Each undeclared identifier is reported only once for each
unction it appears in.)
first.cpp:6: error: expected `;' before "a"
first.cpp:7: error: `a' undeclared (first use this function)
first.cpp:8: error: `boost' has not been declared
first.cpp:8: error: `any_cast' undeclared (first use this function)
first.cpp:8: error: expected primary-expression before "double"
first.cpp:8: error: expected `;' before "double"
first.cpp:9:2: warning: no newline at end of file

Jason@ITHAKA-DB44CFE1 /home/jason
$

我的 boost 库在我的 ./home/Jason/ 中的哪里

显然有什么事情发生了。此外,所有的 boost 库本身都使用这个“boost/...”,所以出于某种原因:

1 - 我在 Boost 上做错了什么 2 - C++/gcc 没有“看到”我的提升

任何输入?

【问题讨论】:

【参考方案1】:

您需要将-I/home/Jason/include 传递给gcc,并且可能还需要传递-L/home/Jason/lib,因为该库未安装在标准路径中。试试:

 g++ -I/home/Jason/include -L/home/Jason/lib -o first first.cpp

此外,一旦编译,它将无法正常运行,因为库不再位于标准路径中。要运行它,您需要将/home/Jason/lib 添加到环境变量LD_LIBRARY_PATH

编辑:正如 Tony D 指出的那样,您可以将 CPLUS_INCLUDE_PATH 设置为 /home/Jason/include,这相当于我给您的编译器选项。

编辑

如果您只想测试您的安装,您可以运行~/bin/Boost.Test 脚本(假设您在安装时启用了--with-libraries=test)。否则,小时主页中应该有一个bin 目录(如果您使用它作为前缀),如果其中有任何名称为Boost 的东西,请尝试运行它(但记得在之前设置LD_LIBRARY_PATH)。

【讨论】:

什么是“标准路径”?我宁愿把它放在那里。 是的,你可以把它放在那里,但是你需要告诉 GCC 在哪里寻找它。 我如何知道它是否安装正确?除了上述之外我还能做些什么吗?我如何告诉 gcc 去哪里看 通过添加我刚刚告诉你的标志 您可以在您的环境中设置CPLUS_INCLUDE_PATH,添加提升路径(您希望在“提升”上方包含版本化目录,因为您将使用#include &lt;boost/xxx&gt;)。【参考方案2】: 头文件链接到“/usr/include”

$ cd /usr/include $ sudo ln -s /usr/local/boost_xxxx/boost boost

编译boost库,将so文件复制到'/usr/lib'

$ sudo cp /usr/local/lib/libboost_regex-gcc41-mt-xxxx.so.xxxx /usr/lib/

【讨论】:

我假设他将它安装在他的主目录中,因为他不能这样做。但这会起作用,所以直接在标准路径中安装 boost ;) @jasonm 标准路径是编译器查找系统头文件和库的位置。这是您使用包管理器安装的任何内容的最终位置。它因系统而异,但通常主要是/usr/usr/local 所以我想我真正关心的是我是否正确安装了它。我运行了 bootstrap.cmd ,看起来还不错。还有什么我需要做的吗?真的,我不是 100% 相信我这样做是正确的。我这样做是为了检查它是否“安装”正确。 我编辑了我的回复,我不明白你只是想测试一下。

以上是关于关于 C++/Boost 的真正基础 - 测试提升的主要内容,如果未能解决你的问题,请参考以下文章

Boost.Test 的数据测试用例真的需要 C++11 吗?

用线程提升python

Visual C++ 2008 提升问题

CMake:找不到提升

无法将犰狳与提升单元测试框架联系起来

为提升线程命名?