编译依赖于仅包含 .so 或 .a 文件的 boost 库的程序

Compiling a program that is dependent on boost libraries with only .so or .a files

我有一个小的测试用例程序,只是为了看看 boost 在某些系统上是否工作。

#include <iostream>
#include <boost/math/distributions/normal.hpp>
#include <boost/math/distributions/chi_squared.hpp>

using namespace std;

int main(int argc, char* argv[]) {

    // Boost test
    boost::math::normal std_normal;
    double x = 1.5;
    cout << boost::math::cdf(std_normal, x) << endl;

    boost::math::normal non_std_normal(1.5, 2);

    cout << boost::math::cdf(non_std_normal, x) << endl; // should output 1/2

    // Test the chi-squared inverse
    int degree_of_freedom = 19;
    boost::math::chi_squared chi_dist(degree_of_freedom);
    cout << boost::math::quantile(complement(chi_dist, 0.05)) << endl;

    return 0;
}

我 ssh 到一些服务器,他们只允许我通过一些充满共享对象和存档文件的目录(即 libboost_log.so、libboost_math_c99.a 等)使用 boost 库。

老实说,我不知道如何使用这些文件。 我试过了(对于 g++ 和 gcc)

g++ test.cpp -o test -l /share/apps/boost/1.55.0/lib

g++ test.cpp -o test -l /share/apps/boost/1.55.0/lib -lboost_system -lboost_filesystem

g++ -std=c++11 -pedantic test.cpp -I/share/apps/boost/1.55.0/include/ -o test

g++ test.cpp -o test -I /share/apps/boost/1.55.0/include -lboost_system -lboost_filesystem

其中 /share/apps/boost/1.55.0/lib 是 .so 和 .a 文件的目录 /share/apps/boost/1.55.0/include 是 .hpp 文件的目录。

我被拒绝了第三条命令的权限,输出如下:

In file included from /share/apps/boost/1.55.0/include/boost/math/special_functions/detail/round_fwd.hpp:11:0, from /share/apps/boost/1.55.0/include/boost/math/special_functions/math_fwd.hpp:26, from /share/apps/boost/1.55.0/include/boost/math/special_functions/erf.hpp:13, from /share/apps/boost/1.55.0/include/boost/math/distributions/normal.hpp:19, from test.cpp:12: /share/apps/boost/1.55.0/include/boost/config.hpp:30:29: fatal error: /share/apps/boost/1.56.0/build/boost_1_56_0/boost/config/user.hpp: Permission denied

我收到第四条命令的错误:

fatal error: boost/math/distributions/normal.hpp: No such file or directory.

您想使用

g++ -isystem /share/apps/boost/1.55.0/include -L /share/apps/boost/1.55.0/lib test.cpp -o test -lboost_system -lboost_filesystem

-isystem 告诉编译器在哪里寻找系统 header 文件。 -L 告诉链接器去哪里寻找库。根据您的代码片段,您是否需要 boost 文件系统或系统库并不明显。

如果您无法读取远程服务器上的 boost headers 或共享库,这与您的问题无关。请联系您的系统管理员寻求帮助。