小编Een*_*oku的帖子

CMake - 使用 FetchContent 下载后如何构建 Boost?

我的目标是在找不到 Boost 存储库时下载它,然后以默认方式(即使用boostrapb2工具)构建它。

我知道,我可以这样下载:

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()函数,但我不确定这是否是推荐的方法。

c++ boost compilation repository cmake

7
推荐指数
1
解决办法
873
查看次数

如何在犰狳中加入矩阵

我有几个进程,每个进程都计算自己的矩阵。最后,我希望他们将他们求解的矩阵发送到根进程,根进程实际上将它们连接到一个大矩阵中,然后简单地以 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)

matrix armadillo submatrix

6
推荐指数
1
解决办法
3067
查看次数

使用MPI_COMM_SELF

我发现了一个名为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)

c mpi communicator

6
推荐指数
1
解决办法
2800
查看次数

Fortran 2008中的函数重载

我从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中做同样的事情呢?

polymorphism fortran overloading fortran2008

5
推荐指数
1
解决办法
285
查看次数

MPI - 更改启动的进程数量

我从 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)

c parallel-processing mpi mpich

4
推荐指数
1
解决办法
1万
查看次数

使用具有多个目标的 CodeCoverage.cmake 进行代码覆盖率分析

我在我的项目中使用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++ unit-testing code-coverage cmake

4
推荐指数
3
解决办法
4968
查看次数

使用 GDB 进行 MPI 调试 - 当前上下文中没有符号“i”

我需要调试我用 C 编写的 MPI 应用程序。我想使用 GDB 手动附加到进程的系统,正如这里推荐的那样(第 6 段)。

问题是,当我尝试打印变量“i”的值时,出现此错误:

No symbol "i" in current context.
Run Code Online (Sandbox Code Playgroud)

同样的问题是set var i=5. 当我尝试运行时info local,它只是声明“无语言环境”。

  • 系统Ubuntu 14.04
  • MPICC cc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
  • GDB GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1。

我用命令编译我的代码

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,但没有任何帮助。


DBG消息

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)

c ubuntu gdb mpi

2
推荐指数
1
解决办法
3475
查看次数

如何预处理pycparser的C源代码

我需要使用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)

c c++

2
推荐指数
1
解决办法
2281
查看次数

如何在CentOS上安装GCC / G ++ 8

我已经习惯了在Debian / Ubuntu的发行版安装软件包,但现在我需要安装gccg++版本8 *。CentOS资料库中只有4. *版本。手动安装它们的正确方法是什么?

gcc g++ centos redhat-dts software-collections

1
推荐指数
3
解决办法
3032
查看次数

C - 检测到堆栈粉碎

我需要实现一个非常简单的矩阵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)

c stack-smash matrix-decomposition

0
推荐指数
1
解决办法
415
查看次数

Python-编写对所有问题/提示的“是”答复的脚本

我遇到了一个由所运行的程序Python2,该程序询问许多是/否类型的问题。

我想对所有答案都回答“是”,但这确实很困难,因为实际上有数百个答案(它基本上是代码解析器,它询问所有找到的变量)。

那么,有没有可能,如何强制Python自动回答“是”?

我在想类似的东西apt-get -y install。而我感兴趣的是关于两个答案Python2Python3

我正在使用,Lubuntu 16.10而我的默认Shell是GNU bash, version 4.3.48

python

-1
推荐指数
1
解决办法
159
查看次数