首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ Armadillo库给出了对`arma::arma_rng_cxx11_instance‘的未定义引用

C++ Armadillo库给出了对`arma::arma_rng_cxx11_instance‘的未定义引用
EN

Stack Overflow用户
提问于 2018-09-01 14:39:51
回答 1查看 1.2K关注 0票数 1

我使用CMake构建我的项目,使用Catch2进行测试。以下是我的项目结构

代码语言:javascript
复制
├── build
├── CMakeLists.txt
├── compile_commands.json
├── include
│   ├── node.h
│   ├── rrt.h
│   └── tree.h
├── Makefile
├── package.xml
├── scripts
├── src
│   ├── main.cpp
│   ├── node.cpp
│   ├── rrt.cpp
│   └── tree.cpp
├── test
│   ├── CMakeLists.txt
│   └── test.cpp
└── third_party
    └── catch.hpp

./CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.8.3)
project(rrt_ros)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(SOURCES 
    ${CMAKE_CURRENT_SOURCE_DIR}/include/rrt.h
    ${CMAKE_CURRENT_SOURCE_DIR}/include/tree.h
    ${CMAKE_CURRENT_SOURCE_DIR}/include/node.h
    ${CMAKE_CURRENT_SOURCE_DIR}/src/rrt.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/tree.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/node.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
    )

find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
find_package(Armadillo REQUIRED)
FIND_PACKAGE(Eigen3 REQUIRED)

add_executable(
    rrt
    ${SOURCES}
    )

target_include_directories(
    rrt
    PUBLIC
    ${catkin_INCLUDE_DIRS}
    ${EIGEN3_INCLUDE_DIR}
    ${ARMADILLO_INCLUDE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)


target_link_libraries(rrt ${catkin_LIBRARIES} ${ARMADILLO_LIBRARIES})
add_subdirectory(test)

test/CMakeLists.txt,我有

代码语言:javascript
复制
project(rrt_ros)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)
find_package(Armadillo REQUIRED)
FIND_PACKAGE(Eigen3 REQUIRED)
message("TESTING......" ${CMAKE_CURRENT_SOURCE_DIR}/../include/rrt.h)

add_executable(rrt_test test.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/../include/rrt.h
    ${CMAKE_CURRENT_SOURCE_DIR}/../include/tree.h
    ${CMAKE_CURRENT_SOURCE_DIR}/../include/node.h
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/rrt.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/tree.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/node.cpp
    )

target_include_directories(
    rrt_test
    PUBLIC
    ${catkin_INCLUDE_DIRS}
    ${Armadillo_INCLUDE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/../third_party
    ${CMAKE_CURRENT_SOURCE_DIR}/../include
    )

target_link_libraries(
    rrt_test
    ${catkin_LIBRARIES}
    ${Aramdillo_LIBRARIES}
    )

rrt.cpp中,我有一个函数,调用armadillo的采样函数

代码语言:javascript
复制
arma::randi<arma::mat>(1, 2, arma::distr_params(1, 10))

当我编译项目时,它会给出一个未定义的错误:

代码语言:javascript
复制
rrt.cpp:(.text._ZTWN4arma23arma_rng_cxx11_instanceE[_ZTWN4arma23arma_rng_cxx11_instanceE]+0x15):  undefined reference to 'arma::arma_rng_cxx11_instance'  
collect2: error: ld returned 1 exit status

但是,当我在./test/CMakeLists.txt中注释掉./test/CMakeLists.txt时,它编译得很好。

EN

回答 1

Stack Overflow用户

发布于 2022-01-20 06:37:11

我最近也遇到了同样的问题。在您的test/CmakeLists.txt中,应该使用${ARMADILLO_LIBRARIES}而不是${Aramdillo_LIBRARIES} (拼写错误和大写问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52129156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档