我对编程缺乏经验。我在安装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做任何事情,或者我是否像往常一样编译我的文件?
如果我的问题听起来很愚蠢,我很抱歉。正如我所提到的,我缺乏经验。我真的希望得到你的帮助!
答案 0 :(得分:1)
库odeint
只是头文件。下载它并包含头文件的路径。假设你已经安装了boost库。就这样。
答案 1 :(得分:0)
我直接使用boost github repository的源代码为我的项目安装boost。这样做可以确保所有使用相同源的开发人员以及使用这些源以及库和标头的开发人员都可以直接使用它们(无需安装到OS中)。
因此,我创建了一个小的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目标调用到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}
)
现在我将这两行添加到主 ./ 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 here