通过env文件在make文件中包括boost库

通过env文件在make文件中包括boost库,boost,makefile,Boost,Makefile,我有一个关于包含boost库来生成文件的问题。这个问题已经在这个论坛和其他论坛上被问过(和回答过)多次了,我无法用那里的建议来解决我的问题,因为我被困在一个更基本的阶段 我使用的是一个现成的make文件,它通过make文件开头包含的env文件包含boost库的地址。因此,我所要做的就是提供正确的boost库文件夹,但是我似乎提供了错误的地址,因为我遇到了一个错误,无法找到boost库: Demo_00.cpp:(.text+0x28): undefined reference to `boost

我有一个关于包含boost库来生成文件的问题。这个问题已经在这个论坛和其他论坛上被问过(和回答过)多次了,我无法用那里的建议来解决我的问题,因为我被困在一个更基本的阶段

我使用的是一个现成的make文件,它通过make文件开头包含的env文件包含boost库的地址。因此,我所要做的就是提供正确的boost库文件夹,但是我似乎提供了错误的地址,因为我遇到了一个错误,无法找到boost库:

Demo_00.cpp:(.text+0x28): undefined reference to `boost::mpi::environment::environment(int&, char**&, bool)'
Demo_00.cpp:(.text+0x34): undefined reference to `boost::mpi::communicator::communicator()'
Demo_00.cpp:(.text+0x40): undefined reference to `boost::mpi::communicator::rank() const'
Demo_00.cpp:(.text+0x55): undefined reference to `boost::mpi::communicator::rank() const'
Demo_00.cpp:(.text+0x8b): undefined reference to `boost::mpi::environment::~environment()'
Demo_00.cpp:(.text+0xb3): undefined reference to `boost::mpi::environment::~environment()'
collect2: ld returned 1 exit status
环境文件的特定部分如下所示:

BOOST_INCLUDE=-I./home/user/Documents/RHPC_2.0/INSTALLATION/boost_1_54_0/
BOOST_LIB_DIR=-L./home/user/Documents/RHPC_2.0/INSTALLATION/boost_1_54_0/stage/lib
BOOST_LIBS=-lboost_mpi-xgcc42-mt -lboost_serialization-xgcc42-mt -lboost_system-xgcc42-mt -lboost_filesystem-xgcc42-mt
我的问题是:

在env文件的模板文件中,第一个地址以“…/boost_1_54_0/include”结尾,但是我的boost文件夹没有include文件夹(仅在文件夹中有一些)。这是个问题吗

我是否需要进行任何调整以提高自由裁量权

是否有一种使用cmake识别正确地址的简单方法?我通过cmake记录片努力工作,但不太明白这将如何实现

另外:我刚刚尝试了手工“编译+链接”,这只适用于编译部分,而不适用于链接。以下是汇编:

/home/user/Documents/RHPC_2.0/INSTALLATION/mpich2-1.4.1p1/bin/mpicxx -c -I/home/user/Documents/RHPC_2.0/INSTALLATION/boost_1_54_0/ -o Demo_00.o Demo_00.cpp
这是链接部分,它不起作用

    /home/user/Documents/RHPC_2.0/INSTALLATION/mpich2-1.4.1p1/bin/mpicxx -L/home/user/Documents/RHPC_2.0/INSTALLATION/boost_1_54_0/stage/lib/ Demo_00.cpp -lboost_mpi-xgcc42-mt -lboost_serialization-xgcc42-mt -lboost_system-xgcc42-mt -lboost_filesystem-xgcc42-mt
执行此命令后,我出现以下错误:

/usr/bin/ld: cannot find -lboost_mpi-xgcc42-mt
/usr/bin/ld: cannot find -lboost_serialization-xgcc42-mt
/usr/bin/ld: cannot find -lboost_system-xgcc42-mt
/usr/bin/ld: cannot find -lboost_filesystem-xgcc42-mt
collect2: ld returned 1 exit status
看起来,这里的问题在于最后4个文件,而不是整个boost文件夹。据我所知,上述文件夹/usr/bin/ld也不存在

我感谢你的帮助,再次为再次提起这个话题表示歉意

谢谢,
Tartaglia

传递给
-I
的任何内容都应指向其下包含
boost/*hpp
文件的文件夹(比如
boost/shared_ptr.hpp


传递给
-L
的任何内容都应该是传递给
-L
的所有内容所在的文件夹(当您说
-lthename
时,相应的文件名是
libthename.so


此外,这些BOOST_*环境变量应该连接到编译器/链接器命令行(我假设在您的情况下已经自动发生了)。

感谢您的快速响应。所以我找到了*.hpp,它们确实在…/boost/文件夹中。所以第一行应该是:BOOST_INCLUDE=-I./home/user/Documents/RHPC_2.0/INSTALLATION/BOOST_1_54_0/BOOST从查看文件夹来看,上面对应的*.cpp文件似乎在…/libs下,所以第二行应该是:BOOST_LIB_DIR=-L./home/user/Documents/RHPC_2.0/INSTALLATION/BOOST_1_54_0`/LIB我仍然收到相同的错误消息。我可以使用这些文件夹中的任何一个进行上述手动链接吗?@user3398324-路径中不应包含
boost
部分,它应在源代码中称为
#include
。您是否编译并安装了boost或者只是下载了源代码?我知道,我文件的源代码实际上包含了hpp文件:#include,因此第一行应该是:boost_include=-I/home/user/Documents/RHPC_2.0/INSTALLATION/boost_1_54_0/I使用sh文件安装了boost,但是我不确定这些文件是否真的被编译过,这就是sh.文件的部分:tar-xvf boost_1_54_0.tar.gz mkdir-p$BASE_DIR/boost/boost_1.54/include cp-r./boost_1_54_0/boost$BASE_DIR/boost/boost_1.54/include cd boost_54_0./bootstrap.sh--prefix=$BASE_DIR/boost/boost/boost_1.54/--with libraries=system,文件系统,mpi,序列化echo“使用mpi:$mpi_编译器_调用;”>>。/tools/build/v2/user-config.jam./b2--layout=taged link=static variant=release threading=multi-runtime link=static stage install关于格式,我无法添加任何新的答案,并且格式选项在注释中非常有限。有没有办法检查我是否真的编译了boost源代码(我确实运行了boost教程中的一个简单的helloworld类型的文件,这很有效)。