我的目标是在找不到 Boost 存储库时下载它,然后以默认方式(即使用boostrap和b2工具)构建它。
我知道,我可以这样下载:
include(FetchContent)
FetchContent_Declare(
Boost
PREFIX external_dependencies/boost
GIT_REPOSITORY https://github.com/boostorg/boost.git
GIT_SUBMODULES libs/system libs/serialization libs/random
libs/function libs/config libs/headers libs/assert libs/core libs/integer
libs/type_traits libs/mpl libs/throw_exception libs/preprocessor libs/utility
libs/static_assert libs/smart_ptr libs/predef libs/move libs/io libs/iterator
libs/detail libs/spirit libs/optional libs/type_index libs/container_hash
libs/array libs/bind
tools/build tools/boost_install
)
FetchContent_GetProperties(Boost)
FetchContent_Populate(Boost)
Run Code Online (Sandbox Code Playgroud)
但是我现在如何正确构建它?我想运行以下命令:
./bootstrap.sh
./b2 headers
./b2 -q cxxflags="-fPIC" --layout=system variant=${BUILD_TYPE} link=${LINK_TYPE} address-model=64 --with-system --with-serialization --with-random
Run Code Online (Sandbox Code Playgroud)
我正在考虑add_custom_target()和add_custom_command()函数,但我不确定这是否是推荐的方法。
我有几个进程,每个进程都计算自己的矩阵。最后,我希望他们将他们求解的矩阵发送到根进程,根进程实际上将它们连接到一个大矩阵中,然后简单地以 ASCII 格式将其输出到文本文件中。是否有可能以某种优雅的方式进行,或者我是否必须遍历每个矩阵并自己“加入”它?
matrix 0:
0 5
4 5
matrix 1:
1 2
3 4
matrix 2:
5 6
8 7
matrix 3:
0 0
2 1
Final "joined" matrix:
0 5 | 1 2
4 5 | 3 4
----+----
5 6 | 0 0
8 7 | 2 1
Run Code Online (Sandbox Code Playgroud) 我发现了一个名为MPI_COMM_SELF的MPI通信器.问题是,我不知道,什么时候有用.在我看来,只有每个过程都"认为"自己是根.
你能解释一下我究竟是如何MPI_COMM_SELF工作的,以及它在哪些情况下有用?
我发现了这个幻灯片,但是那里只是简单地提到了传播者.
我已经尝试过这个"Hello,world"示例,并且所有进程都返回0作为它们的PID.
#include <mpi.h>
#include <stdio.h>
int main() {
MPI_Init(NULL, NULL);
int world_rank;
MPI_Comm_rank(MPI_COMM_SELF, &world_rank);
printf("Hello, my PID is %d!\n",
world_rank);
MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我从Fortran 2008开始,我正在努力与OOP大力合作.看来,很少有材料可以解释2008语言标准中非常基本的OOP概念.
我找到了有关继承的信息,但我无法找到有关多态的任何信息.
所以,如果我想在C++中重载一个函数,我可以这样做(来自维基百科的例子):
// volume of a cube
int volume(const int s)
{
return s*s*s;
}
// volume of a cylinder
double volume(const double r, const int h)
{
return 3.1415926*r*r*static_cast<double>(h);
}
// volume of a cuboid
long volume(const long l, const int b, const int h)
{
return l*b*h;
}
Run Code Online (Sandbox Code Playgroud)
但是,我怎么能在Fortran 2008中做同样的事情呢?
我从 MPI 开始。我想尝试一个经典的“Hello,world”程序,它也会打印每个进程的编号以及其他一些信息。我的程序可以工作,但我对mpiexec 的实际工作原理有点困惑。问题是,当我指定进程数时,有时它们不会启动。例如,我使用这个命令:
mpiexec -np 4 ./hello
Run Code Online (Sandbox Code Playgroud)
但只有 2 或 3 个进程被启动,而不是 4 个。启动的进程数量发生变化,所以我真的很困惑。问题出在我的电脑上(我只有双核)还是正常现象?
你好ç:
#include <stdio.h>
#include <mpi.h>
int main(){
MPI_Init(NULL, NULL);
// Number of processes
int world_size;
MPI_Comm_size( MPI_COMM_WORLD, &world_size );
// Number of current process
int process_id;
MPI_Comm_rank( MPI_COMM_WORLD, &process_id );
// Processor name
char processor_name[ MPI_MAX_PROCESSOR_NAME ];
int name_len;
MPI_Get_processor_name( processor_name, &name_len );
printf("Hello! - sent from process %d running on processor %s.\n\
Number of processes is %d.\n\
Length of proc name is …Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用Boost 单元测试框架实现了单元测试,并组织成几个模块,即:
#define BOOST_TEST_MODULE Connection_test
#ifndef BOOST_TEST_DYN_LINK
#define BOOST_TEST_DYN_LINK
#endif
#ifndef BOOST_TEST_NO_MAIN
#define BOOST_TEST_NO_MAIN
#endif
#include <boost/test/unit_test.hpp>
#include <boost/test/output_test_stream.hpp>
#define BOOST_TEST_MODULE Connection_test
BOOST_AUTO_TEST_SUITE(Connection_test)
BOOST_AUTO_TEST_CASE(Connection_construction__test) {
***
}
BOOST_AUTO_TEST_SUITE_END()
Run Code Online (Sandbox Code Playgroud)
我将每个模块编译为单个可执行文件。
我想使用CodeCoverage.cmake模块来运行代码覆盖率分析,但我遇到了问题。我应该指定一个测试可执行文件SETUP_TARGET_FOR_COVERAGE_LCOV,但我没有只有一个。
有没有办法一次设置多个测试可执行文件CodeCoverage.cmake?
我已经将测试添加add_test()到我的根 CMakeLists.txt 并像这样修改了我的覆盖目标
include(CTest)
add_test(NAME constant_neuron_test COMMAND constant_neuron_test)
add_test(NAME binary_neuron_test COMMAND binary_neuron_test)
add_test(NAME logistic_neuron_test COMMAND logistic_neuron_test)
add_test(NAME connectionFunctionGeneral_test COMMAND connectionFunctionGeneral_test)
add_test(NAME connection_Function_identity_test COMMAND connection_Function_identity_test)
add_test(NAME neural_network_test COMMAND neural_network_test)
add_test(NAME dataset_test COMMAND dataset_test)
add_test(NAME particle_swarm_test COMMAND particle_swarm_test) …Run Code Online (Sandbox Code Playgroud) 我需要调试我用 C 编写的 MPI 应用程序。我想使用 GDB 手动附加到进程的系统,正如这里推荐的那样(第 6 段)。
问题是,当我尝试打印变量“i”的值时,出现此错误:
No symbol "i" in current context.
Run Code Online (Sandbox Code Playgroud)
同样的问题是set var i=5. 当我尝试运行时info local,它只是声明“无语言环境”。
我用命令编译我的代码
mpicc -o hello hello.c
Run Code Online (Sandbox Code Playgroud)
并执行它
mpiexec -n 2 ./hello
Run Code Online (Sandbox Code Playgroud)
我试图寻找这个问题,但解决方案通常是在 GCC 中不使用任何优化 (-O) 选项,但这对我没有用,因为我在这里没有使用它们中的任何一个,我正在编译与 MPICC。我已经尝试将 "i" 变量声明为volatile,并mpicc使用-gand启动-O0,但没有任何帮助。
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc. …Run Code Online (Sandbox Code Playgroud) 我需要使用pycparser解析我的C和C++代码,但之前需要删除预处理程序指令和注释.
所以,你知道怎么做吗?我找到了CPP预处理器,但我不知道,如果我可以像这样使用它,没有"完整"的预处理.
我也发现了一个unifdef工具,它似乎完全符合我的要求,但仅限于预处理器条件(例如#ifdef).
我不想自己编写这个工具,因为它将用于一个非常大的项目,所以我想使用一些非常复杂的东西.
我试图找到地方,test这个代码中调用的函数在哪里:
#include <stdio.h>
// asdfdsa
/* sadfsd
*
*/
void test() {
printf("asd");
}
int main() {
test();
test();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用命令预处理了这段代码gcc -E -std=c99 test.c -o testP.c然后我试着用这个Python代码找到函数调用:
#-----------------------------------------------------------------
# pycparser: func_defs.py
#
# Using pycparser for printing out all the calls of some function
# in a C file.
#
# Copyright (C) 2008-2015, Eli Bendersky
# License: BSD
#-----------------------------------------------------------------
from __future__ …Run Code Online (Sandbox Code Playgroud) 我已经习惯了在Debian / Ubuntu的发行版安装软件包,但现在我需要安装gcc和g++版本8 *。CentOS资料库中只有4. *版本。手动安装它们的正确方法是什么?
我需要实现一个非常简单的矩阵A的就地LU分解.我正在使用高斯消除,我想用3x3矩阵测试它.问题是,我不断收到stack smashing错误,我不知道为什么.我没有在我的代码中看到任何问题,这可能会做到这一点.你有什么主意吗?
问题可能在分解块中.
###My code:###
#include <stdio.h>
int main() {
int n = 3; // matrix size
int A[3][3] = {
{1, 4, 7},
{2, 5, 8},
{3, 6, 10}
};
printf("Matrix A:\n");
for( int i=0; i < n; i++ ) {
for( int j=0; j < n; j++ ) {
printf("%d ", A[i][j]);
if ( j % 2 == 0 && j != 0 ) {
printf("\n");
}
}
}
// FACTORIZATION
int k;
int rows;
for( …Run Code Online (Sandbox Code Playgroud) 我遇到了一个由所运行的程序Python2,该程序询问许多是/否类型的问题。
我想对所有答案都回答“是”,但这确实很困难,因为实际上有数百个答案(它基本上是代码解析器,它询问所有找到的变量)。
那么,有没有可能,如何强制Python自动回答“是”?
我在想类似的东西apt-get -y install。而我感兴趣的是关于两个答案Python2和Python3。
我正在使用,Lubuntu 16.10而我的默认Shell是GNU bash, version 4.3.48。
c ×5
c++ ×3
mpi ×3
cmake ×2
armadillo ×1
boost ×1
centos ×1
communicator ×1
compilation ×1
fortran ×1
fortran2008 ×1
g++ ×1
gcc ×1
gdb ×1
matrix ×1
mpich ×1
overloading ×1
polymorphism ×1
python ×1
redhat-dts ×1
repository ×1
stack-smash ×1
submatrix ×1
ubuntu ×1
unit-testing ×1