CentOS 和一个小型 boost 示例

CentOS 和一个小型 boost 示例

我在这里问这个问题,因为我认为,它与 Linux 的关系比与 boost 本身的关系更大。

所以我创建了一个小的cpp文件:

#include <boost/math/special_functions/round.hpp>
#include <iostream>

int main(int argc, char **argv)
{
    std::cout << "Start rounding ..." << std::endl;

    double b = boost::math::round(1.5);
    std::cout << "Rounding of 1.5: " << b << std::endl;

    return 0;
}

现在我开始编译它:

g++ main.cpp

一切都成功了,我得到了一个a.out文件。当我输入命令时ldd a.out,我得到:

linux-vdso.so.1 =>  (0x00007ffdfdf38000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f6183d77000)
libm.so.6 => /lib64/libm.so.6 (0x00007f6183a74000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f618385e000)
libc.so.6 => /lib64/libc.so.6 (0x00007f618349d000)
/lib64/ld-linux-x86-64.so.2 (0x00007f61840a7000)

我在这里有一个问题:

为什么编译时没有错误呢?我假设编译器/链接器会说:Hey, there is a function declared (in the boost hpp file), but not defined.我假设 round 函数的定义是在 boost 库之一中定义的。我认为,我应该在编译/链接过程中添加类似-lboost_math_c99l.

答案1

嗯,对我来说失败了(在 Mac OS X 上),所以让我们看看 CentOS 可能从哪里获取该文件......

# yum whatprovides '*/round.hpp'
...

在该输出中的某个地方应该引用boost-devel一些建筑复古。因此,我假设您的系统已boost-devel安装该软件包,其中包括所需的标头,编译器可以找到该标头(除非构建环境被破坏)。知道包名称后,您可以深入研究:

# rpm -ql boost-devel | grep ns/round.hpp
/usr/include/boost/math/special_functions/round.hpp

相关内容