我正在编写一个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++
库的经验。
1条答案
按热度按时间ipakzgxi1#
你可以这样做
还有你需要的任何东西