我在编程方面真的是经验不足。我在安装odeint (和boost)来解微分方程系统时遇到了麻烦。我已经看了很多关于安装boost的问题,我尝试了很多,但我还不能使用odeint。我正在使用Mac Yosemite 10.10.5,下面是我的问题,非常感谢你的帮助:
1,如果我可以成功安装boost,那么当我想使用odeint时,我是否只需要将#include<boost/odeint/optionalSubdirectories>作为我的文件头?我弄糊涂了,因为在odeint webpage上,有可供下载的文件,其中包括示例。我想知道在我下载boost之后,我是否必须下载这些文件才能使odeint工作?如果是,我应该把从odeint网页下载的文件放在哪里?
2 .在boost's installing instructions中,他们说第二步(下载后)是在我想要安装Boost的目录中执行tar --bzip2 -xf /path/to/boost_1_61_0.tar.bz2。哪里是放置Boost安装的好地方?这样做之后,我可以开始在我的c++项目中包含头文件了吗?或者,在odeint真正工作之前,我还需要做一些其他的事情吗?
3,当我编译我的文件时(在写完解微分方程的代码之后),我需要用boost或odeint做些什么,还是像往常一样编译我的文件?
如果我的问题听起来很愚蠢,我很抱歉。正如我所提到的,我缺乏经验。我真心希望您的帮助!
发布于 2016-07-11 00:59:04
库odeint只是一些头文件。下载它并包含头文件的路径。假设你已经安装了boost库。就这样。
发布于 2020-02-12 07:39:48
我直接使用boost github repository中的源代码为我的项目安装boost。这样做,我可以确保所有使用相同源代码以及库和头文件的开发人员都可以直接使用(不需要安装到操作系统中)。
因此,我创建了一个小bash脚本,用于下载、构建和安装boost:
./cmake/SetupBoost.sh
#!/bin/bash
NO_OF_CORES_TO_USE=$(($(nproc --all)-1))
echo " > collect boost setup information"
if [ $# -eq 1 ]
then
echo "arguments supplied"
BOOST_ROOT_DIR=$1
BOOST_VERSION="latest"
elif [ $# -eq 2 ]
then
BOOST_ROOT_DIR=$1
BOOST_VERSION=$2
else
echo "warning"
exit -1
fi
BOOST_SOURCE_DIR="${BOOST_ROOT_DIR}/source"
if [ -d "${BOOST_SOURCE_DIR}/.git" ]; then
echo " > repository already exist - checkout"
cd ${BOOST_SOURCE_DIR} && \
git checkout tags/${BOOST_VERSION}
else
echo " > repository do not exist - clone"
git clone \
--branch ${BOOST_VERSION} \
--recurse-submodules \
-j${NO_OF_CORES_TO_USE} \
https://github.com/boostorg/boost.git \
${BOOST_SOURCE_DIR}
fi
echo " > perform bootstrap"
cd ${BOOST_SOURCE_DIR} && ./bootstrap.sh
echo " > build and install boost libraries"
cd ${BOOST_SOURCE_DIR} && ./b2 \
link=static \
runtime-link=static \
install \
--prefix=${BOOST_ROOT_DIR} \
-j${NO_OF_CORES_TO_USE}其中可以像这样调用脚本:
./SetupBoost.sh <installDir> [version-tag]现在,我可以将这个脚本作为CMake-target调用到CMake中(我喜欢将boost源代码、头文件和库放入./extern/boost/):
./cmake/SetupBoost.cmake
cmake_minimum_required(VERSION 3.14)
set(BOOST_VERSION "boost-1.70.0")
set(BOOST_ROOT_DIR ${EXTERN_ROOT_DIR}/boost)
set(BOOST_SOURCE_DIR ${BOOST_ROOT_DIR}/source)
set(BOOST_LIBRARY_DIR ${BOOST_ROOT_DIR}/lib)
set(BOOST_INCLUDE_DIR ${BOOST_ROOT_DIR}/include)
### build boost sources ########################################################
add_custom_command(
OUTPUT
${BOOST_INCLUDE_DIR}
${BOOST_ROOT_DIR}
COMMAND
bash ${PROJECT_SOURCE_DIR}/cmake/SetupBoost.sh ${BOOST_ROOT_DIR} ${BOOST_VERSION}
WORKING_DIRECTORY
${PROJECT_SOURCE_DIR}
)
add_custom_target(
boost_library
DEPENDS
${BOOST_INCLUDE_DIR}
${BOOST_ROOT_DIR}
)现在我将这两行添加到main ./CMakeLists.txt
set(EXTERN_ROOT_DIR ${PROJECT_SOURCE_DIR}/extern)
include(cmake/SetupBoost.cmake)我的应用程序对应的./app/CMakeLists.txt现在看起来如下所示:
add_executable( ${PROJECT_NAME}
app.cpp
)
add_dependencies( ${PROJECT_NAME}
boost_library
)
target_include_directories( ${PROJECT_NAME} PRIVATE
${BOOST_INCLUDE_DIR}
)对应的源文件app/app.cpp可以这样使用头部:
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/math/special_functions/gamma.hpp>
// your code goes herehttps://stackoverflow.com/questions/37979987
复制相似问题