编译依赖于仅包含 .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 或共享库,这与您的问题无关。请联系您的系统管理员寻求帮助。
我有一个小的测试用例程序,只是为了看看 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 或共享库,这与您的问题无关。请联系您的系统管理员寻求帮助。