我正在尝试将 C++ 项目链接到 RCpp 库;该文件名为Rcpp.so,而不是 linux-default libRcpp.so。此外,图书馆位于非标准位置/usr/lib/R/site-library/Rcpp/libs。
find_library所以我尝试使用和的组合target_link_libraries:
cmake_minimum_required(VERSION 3.8)
project("R-Tests")
find_library(RCPP
NAMES Rcpp.so
HINTS /usr/lib/R/site-library/Rcpp/libs
)
if (NOT RCPP)
message(FATAL_ERROR "Could not find Rcpp - exiting.")
else()
message("Found Rcpp: " ${RCPP})
endif()
# test target
add_executable(rcpptest main.cpp)
target_link_libraries(rcpptest ${RCPP})
Run Code Online (Sandbox Code Playgroud)
配置工作正常,CMake 输出:
Found Rcpp: /usr/lib/R/site-library/Rcpp/libs/Rcpp.so
Run Code Online (Sandbox Code Playgroud)
然而,在构建过程中,CMake 传递-lRcpp给编译器,这会导致编译失败,因为库文件没有命名,libRcpp.so而是Rcpp.so:
[100%] Linking CXX executable rcpptest
/usr/bin/cmake -E cmake_link_script CMakeFiles/rcpptest.dir/link.txt --verbose=1
c++ CMakeFiles/rcpptest.dir/main.cpp.o -o rcpptest -L/usr/lib/R/site-library/Rcpp/libs -Wl,-rpath,/usr/lib/R/site-library/Rcpp/libs -lRcpp
/usr/bin/ld: cannot find -lRcpp
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
由于该message行可以很好地打印文件的完整路径Rcpp.so,因此有什么方法可以将此路径添加到编译器而不是和target_link_libraries的组合吗?-L-l
根据这个问题,应该通过添加来禁用它cmake_policy(SET CMP0060 NEW);NEW但是,如果我将其设置为或,我看不到 CMake 的行为有任何变化OLD。
您可能已经被CMP0060的旧(默认)行为所困扰,它将绝对路径转换回-lfoo.
或者,定义并使用 IMPORTED 目标:
add_library(Rcpp SHARED IMPORTED)
set_property(TARGET Rcpp PROPERTY IMPORTED_LOCATION /usr/lib/R/site-library/Rcpp/libs/Rcpp.so)
target_link_libraries(rcpptest Rcpp)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2687 次 |
| 最近记录: |