C++ 动态链接到Boost';s库而不是仅标题

C++ 动态链接到Boost';s库而不是仅标题,c++,linux,boost,shared-libraries,ublas,C++,Linux,Boost,Shared Libraries,Ublas,我对使用Boost还不熟悉,我已经了解了如何通过包含我感兴趣的头文件来处理它 出于某些原因,我必须使用动态库。我已经安装了这个模块,但是我看不到对我来说最重要的模块——处理矩阵的模块等等。我想应该是乌布拉斯 ***精髓:* 我正试图替换那些线路** #include <boost/numeric/ublas/matrix.hpp> #include <boost/numeric/ublas/io.hpp> #包括 #包括 加载时。a.so库。问题是,我无法理解哪个模块

我对使用Boost还不熟悉,我已经了解了如何通过包含我感兴趣的头文件来处理它

出于某些原因,我必须使用动态库。我已经安装了这个模块,但是我看不到对我来说最重要的模块——处理矩阵的模块等等。我想应该是乌布拉斯

***精髓:*

我正试图替换那些线路**

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#包括
#包括
加载时。a.so库。问题是,我无法理解哪个模块对应于uBlas。我不确定是否有该模块。

您可以看到没有任何“数字”或“ublas”模块

我有点困惑。我必须使用哪一个模块才能获得与使用
#include
等相同的功能

一些澄清: 我怎么看那个?我只能使用头文件或加载库(.a或.so)。我想找到文件模拟(
.a
.so
),允许使用ublas以及我包含的头文件

@Rzu我希望使用库,而不是使用头。我找不到合适的图书馆。对我来说,有标题是很奇怪的,但如果我生成.a和.so文件,就没有正确的文件(ublas)

这是一种错误的二分法。即使使用共享库,您通常也会使用(有效地:need)来拥有相应的头并在编译代码时包含它们

唯一的区别是实现(从技术上讲,定义)是否也在头文件中。如果是这样的话,就不需要在定义中链接(无论是静态的还是动态的)

对于模板库,这是不可避免的:


因此,如果您需要一个可以动态链接的非通用接口,那么您需要在自己的库中定义子集,然后以您喜欢的形式分发和链接该子集。

您不需要为使用ublas创建任何静态或动态库。 ublas是一个仅头部(完全模板化)库

如果您已使用软件包管理器(如apt)安装了Boost,则ublas头文件应位于
/usr/include/Boost/numeric/ublas
文件夹中

只需添加行

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#包括
#包括
输入到源文件或头文件中。然后,您可以实例化一个矩阵类

boost::numeric::ublas::matrix<float> A(3,4);
boost::numeric::ublas::矩阵A(3,4);

<代码> >代码> UBLAS < /Cord>是一个头文件库:C++没有模块,不清楚你是否在问共享库、静态库、头文件或什么。如果它是头,它就不会生成任何静态或动态库。您只需在程序中包含标题,然后就可以使用它了。不需要与任何库链接。@R zu你在说什么?在我看来,仅标题模板“库”的问题在于它们不能动态加载-你必须运行编译器才能使它们可用。因此,动态加载的库是有问题的。您必须创建一个源文件,用您感兴趣的类型实例化模板,将该实例化编译成共享对象,然后加载该对象。因此,我认为您应该改变对动态加载对象或使用Boost的想法。或者,您必须找到一种方法将所需的模板转换为可以动态加载的共享对象。