我如何制作 sigpack 来找到犰狳?

Posted

技术标签:

【中文标题】我如何制作 sigpack 来找到犰狳?【英文标题】:how do I make sigpack to find armadillo? 【发布时间】:2017-11-09 16:08:37 【问题描述】:

我目前正在尝试使用 cmake 让 sigpack 找到 armadillo。包含犰狳似乎不是问题,因为我可以使用find_package() 包含它,但由于某种原因sigpack 找不到它。

sigpack 是一个只有头文件的库,我将它包含到我的项目中的方式是将头文件移动到我的项目中,并手动将它们包含在 cmake 中,我有点不确定它是否是正确完成的,或者如果它本来可以是其他的。

MESSAGE(“In spectogram CMAKELIST”)
MESSAGE( "$CMAKE_CURRENT_SOURCE_DIR/base/base.h" )


SET(HEADERS
    $CMAKE_CURRENT_SOURCE_DIR/base/base.h
    $CMAKE_CURRENT_SOURCE_DIR/fftw/fftw.h
    $CMAKE_CURRENT_SOURCE_DIR/base/base.h
    $CMAKE_CURRENT_SOURCE_DIR/filter/filter.h
    $CMAKE_CURRENT_SOURCE_DIR/gplot/gplot.h
    $CMAKE_CURRENT_SOURCE_DIR/image/image.h
    $CMAKE_CURRENT_SOURCE_DIR/kalman/kalman.h
    $CMAKE_CURRENT_SOURCE_DIR/parser/parser.h
    $CMAKE_CURRENT_SOURCE_DIR/resampling/resampling.h
    $CMAKE_CURRENT_SOURCE_DIR/spectrum/spectrum.h
    $CMAKE_CURRENT_SOURCE_DIR/timing/timing.h
    $CMAKE_CURRENT_SOURCE_DIR/window/window.h
    $CMAKE_CURRENT_SOURCE_DIR/sigpack.h
    )

find_package(Armadillo REQUIRED)
include_directories($ARMADILLO_INCLUDE_DIRS)

add_library(spectogram STATIC spectogram.cpp spectogram.h $HEADERS)
target_link_libraries(spectogram PUBLIC $ARMADILLO_LIBRARIES)
target_include_directories(spectogram PUBLIC $CMAKE_CURRENT_SOURCE_DIR)
target_compile_features(spectogram PUBLIC cxx_defaulted_functions)

MESSAGE(“out spectogram CMAKELIST”)

目前给我一个错误的代码是这个类定义:

#pragma once

#include "sigpack.h"
class spectogram 
private:
    int m_var 23 ;

public:
    void set_var(int value);
    int  get_var() const;
;

此代码当前给我错误消息:

 error: ‘arma_inline’ does not name a type
     arma_inline double sinc( double x )

这可能是因为 sigpack 看不到犰狳?我怎么做?

这样编译:

#pragma once

#include <armadillo>
//#include <sigpack.h>  sigpack.h cant see armadillo?

class spectogram 
private:
    int m_var 23 ;
    arma::mat somethind;
public:
    void set_var(int value);
    int  get_var() const;
;

【问题讨论】:

看起来子目录中的标题(如base/base.h)并不打算直接包含在内。请改用#include &lt;sigpack.h&gt; @Tsyvarev 我试过了……同样的问题…… 奇怪:sigpack.h首先包含armadillo,然后又定义了arma_inline宏。 是的...更奇怪的是我可以在类定义代码中#include &lt;armadillo&gt;没有任何问题,但是当它在sigpack.h中完成时,就会出现问题。 你收到here的犰狳了吗? 【参考方案1】:

sigpack 取决于犰狳版本>7,8... 和 apt-get install 版本 4,... 所以最后从网站下载 tar。

cmake . &amp;&amp; make &amp;&amp; sudo make install

我的项目能够找到正确的头文件。

【讨论】:

以上是关于我如何制作 sigpack 来找到犰狳?的主要内容,如果未能解决你的问题,请参考以下文章

如何在编译期间强制犰狳库链接到本地​​ OpenBLAS

如何从 C++(带有犰狳)代码链接到 PETSc?

使用犰狳库时如何解决编译问题

犰狳,如何增长一个向量并获得他的大小?

如何在像犰狳这样的库中扩展一个类?

如何在犰狳中更新稀疏矩阵的值