cmake 无法链接到CLion Rcpp项目中的Rcpp库

lokaqttq  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(237)

我正在编写一个R包,它严重依赖于Rcpp。但是,我对用Rstudio编写C++源代码的质量不满意,我更喜欢使用CLion。
在这里--虽然我设法在CLion中编译了代码,并设法稍后在Rstudio中正确地使用它,但我希望有一个工作的可执行文件,我可以在CLion中进行测试和调试。
这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 3.16.5)
project(SomeProject)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")

# R headers

include_directories(/usr/include/R)

# Rcpp headers

include_directories(~/R/x86_64-pc-linux-gnu-library/4.0/Rcpp/include)

file(GLOB SOURCE_FILES *.cpp *.h)

add_library(SomeProject ${SOURCE_FILES})

target_link_libraries(SomeProject /lib/R/lib/libR.so) # this is where my libR is located

library.h


# include <Rcpp.h>

namespace SomeProject {
    Rcpp::List doSomething(Rcpp::List someList);
}

library.cpp


# include "library.h"

Rcpp::List SomeProject::doSomething(Rcpp::List someList) {
    return someList;
}

但是,如果我尝试添加一些可执行文件来调用Rcpp中的内容:


# include "../library.h"

int main() {
    Rcpp::List list(0);
    return 0;
}

并将可执行目标添加到CMakeLists.txt

add_executable(SomeProjectExec exec/main.cpp)
target_link_libraries(SomeProjectExec SomeProject)

然后我运行这个可执行文件,我得到以下消息:

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

我尝试过在CMakeLists.txt中链接Rcpp库,而不仅仅是头文件:

target_link_libraries(SomeProject ~/R/x86_64-pc-linux-gnu-library/4.0/Rcpp/libs/Rcpp.so)

但在生成过程中导致错误:

/usr/bin/ld: cannot find -lRcpp

有人知道我做错了什么或者我错过了什么吗?提前感谢你的帮助!
我使用5.4.38-1-MANJARO操作系统。
我想指出的是,虽然我可以用C++编写一些代码,但我没有使用CMake或任何其他工具构建C++库的经验。

ipakzgxi

ipakzgxi1#

你可以这样做


# find R headers

execute_process (
    COMMAND bash -c "R CMD config --cppflags | sed s/-I//g"
    OUTPUT_VARIABLE rInclude
    OUTPUT_STRIP_TRAILING_WHITESPACE
)

# find Rcpp headers

execute_process (
    COMMAND bash -c "Rscript -e 'Rcpp:::CxxFlags()' | sed s/-I//g | sed 's/.\\(.*\\)/\\1/' | sed 's/\\(.*\\)./\\1/'"
    OUTPUT_VARIABLE rcppInclude
)

INCLUDE_DIRECTORIES("${rInclude} ${rcppInclude}")

还有你需要的任何东西

相关问题