Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将特征值与cmake结合使用 我对C++和CMake比较新,试图在我的CKEY项目中使用这个库,但是我不能让它工作。_C++_Cmake_Eigen - Fatal编程技术网

将特征值与cmake结合使用 我对C++和CMake比较新,试图在我的CKEY项目中使用这个库,但是我不能让它工作。

将特征值与cmake结合使用 我对C++和CMake比较新,试图在我的CKEY项目中使用这个库,但是我不能让它工作。,c++,cmake,eigen,C++,Cmake,Eigen,我搜索了Stackoverflow和Google,但没有找到适合我的解决方案 我当前的目录结构 ./CMakeLists.txt ./src/CMakeLists.txt 为了进行编译,我使用的是gcc和g++,这两种版本都是随Home brew安装的7.3.0_1版 因为它是一个只包含头的库,所以我假设只使用include\u目录就足够了。我还尝试使用在上提到的官方方法,但这也不起作用 在当前的配置中,我遇到了很多错误,看起来像这样,只是一个小摘录: **/evsr/src/lib/e

我搜索了Stackoverflow和Google,但没有找到适合我的解决方案

我当前的目录结构

./CMakeLists.txt

./src/CMakeLists.txt

为了进行编译,我使用的是gcc和g++,这两种版本都是随Home brew安装的7.3.0_1版

因为它是一个只包含头的库,所以我假设只使用include\u目录就足够了。我还尝试使用在上提到的官方方法,但这也不起作用

在当前的配置中,我遇到了很多错误,看起来像这样,只是一个小摘录:

    **/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:8: error: 'traits' is not a class template
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
        ^~~~~~
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:15: error: 'Matrix' was not declared in this scope
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
               ^~~~~~
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:15: note: suggested alternative: 'atoi'
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
               ^~~~~~
               atoi
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:75: error: expected unqualified-id before '>' token
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
                                                                           ^
In file included from **/evsr/src/infra/random_projection.cc:9:0:
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:179:27: error: expected template-name before '<' token
   : public PlainObjectBase<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
                           ^
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:179:27: error: expected '{' before '<' token
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:428:32: error: wrong number of template arguments (3, should be 6)
 typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix;  \
                                ^
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:441:1: note: in expansion of macro 'EIGEN_MAKE_TYPEDEFS'
 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
 ^~~~~~~~~~~~~~~~~~~
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:449:1: note: in expansion of macro 'EIGEN_MAKE_TYPEDEFS_ALL_SIZES'
 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int,                  i)
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~

也许有人遇到了这个或类似的问题,并且知道答案。我为每一个小提示感到高兴。

我通过在我的src/CMakeLists.txt中向Eigen头文件添加绝对路径,解决了这个问题


我不太清楚这为什么解决了这个问题,但确实解决了。

谢谢你的建议。我已经尝试过这种方法,但它给了我以下错误:src/CMakeLists.txt:39 find_package:找不到由egen3请求的版本3.3提供的具有以下任何名称的包配置文件:egen3Config.cmakegen3-config.CMake将egen3的安装前缀添加到CMake_prefix_路径或者将Eigen3_DIR设置为包含上述文件之一的目录。如果Egeng3提供单独的开发包或SDK,请确保已安装。虽然不是最好的样式,但您的CMakeLists.txt文件显然正在使用Eigen。其他原因导致粘贴的代码段出现一连串错误。详细构建项目,即:使VERBOSE=1,并自上而下修复错误。如果您需要帮助,请使用生成错误的第一个文件中的所有错误更新您的问题。还请注意,@VictorGubin链接的示例表明您的系统上已安装了Egeng,可以通过软件包管理器,也可以通过Egeng文件中的方法2安装。@nega感谢您的评论。你说不是最好的款式是什么意思?有什么可以改进的吗?您可能在最初的调用中使用额外的Eigen太深了,无法包含_目录
cmake_minimum_required(VERSION 3.9)

find_program(CMAKE_C_COMPILER NAMES $ENV{CC} gcc PATHS ENV PATH NO_DEFAULT_PATH)
find_program(CMAKE_CXX_COMPILER NAMES $ENV{CXX} g++ PATHS ENV PATH NO_DEFAULT_PATH)

set(CMAKE_VERBOSE_MAKEFILE ON)

set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin)
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/build)

set (CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")

project(myProject VERSION 0.0.1)

#For Testing
include(CTest)
enable_testing()

SET(SOURCE_FILES main.cc)
add_executable(${CMAKE_PROJECT_NAME}_run ${SOURCE_FILES})

include_directories(src)
add_subdirectory(src)

target_link_libraries(${CMAKE_PROJECT_NAME}_run ${CMAKE_PROJECT_NAME}_lib)
project(${CMAKE_PROJECT_NAME}_lib)

# Clone Eigen
set(EXTERNAL_DIR ${CMAKE_SOURCE_DIR}/src/lib/)
if(NOT EXISTS ${EIGEN_DIR})
    find_package(Git REQUIRED)
    execute_process(
            COMMAND ${GIT_EXECUTABLE} clone https://github.com/eigenteam/eigen-git-mirror ${EXTERNAL_DIR}eigen
    )
endif()

    set(HEADER_FILES
           myHeaders
    )

    set(SOURCE_FILES
            mySources
    )


    include_directories(lib/eigen/Eigen/)

    add_library(${CMAKE_PROJECT_NAME}_lib STATIC ${SOURCE_FILES} ${HEADER_FILES})
    **/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:8: error: 'traits' is not a class template
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
        ^~~~~~
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:15: error: 'Matrix' was not declared in this scope
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
               ^~~~~~
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:15: note: suggested alternative: 'atoi'
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
               ^~~~~~
               atoi
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:18:75: error: expected unqualified-id before '>' token
 struct traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
                                                                           ^
In file included from **/evsr/src/infra/random_projection.cc:9:0:
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:179:27: error: expected template-name before '<' token
   : public PlainObjectBase<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
                           ^
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:179:27: error: expected '{' before '<' token
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:428:32: error: wrong number of template arguments (3, should be 6)
 typedef Matrix<Type, Size, Size> Matrix##SizeSuffix##TypeSuffix;  \
                                ^
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:441:1: note: in expansion of macro 'EIGEN_MAKE_TYPEDEFS'
 EIGEN_MAKE_TYPEDEFS(Type, TypeSuffix, 2, 2) \
 ^~~~~~~~~~~~~~~~~~~
**/evsr/src/lib/eigen/Eigen/src/Core/Matrix.h:449:1: note: in expansion of macro 'EIGEN_MAKE_TYPEDEFS_ALL_SIZES'
 EIGEN_MAKE_TYPEDEFS_ALL_SIZES(int,                  i)
 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include_directories(${CMAKE_SOURCE_DIR}/src/lib/eigen/)