2017-02-18 24 views
39

Làm thế nào để tránh CHÚ THÍCH sau đây xuất hiện trong R CMD check với phiên bản phát triển R mới (R Đang phát triển (không ổn định) (2017-02-15 r72179))?R CMD lưu ý kiểm tra: Không tìm thấy cuộc gọi đến: 'R_registerRoutines', 'R_useDynamicSymbols'

• checking for unstated dependencies in examples ... OK 
• checking line endings in C/C++/Fortran sources/headers ... OK 
• checking compiled code ... NOTE 
File ‘pkgname/libs/pkgname.so’: 
    Found no calls to: ‘R_registerRoutines’, ‘R_useDynamicSymbols’ 

It is good practice to register native routines and to disable symbol 
search. 

Ví dụ trong Hmisc

Trả lời

35

Thông điệp có phần phức tạp. Tôi nhìn xung quanh cũng trong các gói khác và tôi thấy rằng useDynLib(packagename) trong tệp NAMESPACE đã được thay thế bằng useDynLib(packagename, .registration = TRUE).

Bên cạnh đó, tôi đã thêm một tập tin .c, tên registerDynamicSymbol trong thư mục src/ với đoạn mã sau:

// RegisteringDynamic Symbols 

#include <R.h> 
#include <Rinternals.h> 
#include <R_ext/Rdynload.h> 

void R_init_markovchain(DllInfo* info) { 
    R_registerRoutines(info, NULL, NULL, NULL, NULL); 
    R_useDynamicSymbols(info, TRUE); 
} 

tôi đã đề nghị này từ GitHub Rcpp. Tham chiếu chuẩn tắc là trong Writing R Extensions

Ngoài ra R Devel Mailinglist cung cấp các thông tin bổ sung.

CẬP NHẬT

Cách tiếp cận đơn giản trực tiếp nhất là:

  1. sử dụng dòng điện Version Phát triển R (mà cuối cùng sẽ trở thành 3.4)
  2. Chạy tools::package_native_routine_registration_skeleton(".") và sao chép và dán toàn bộ sản lượng trong một tệp packagename_init.c để được đặt trong src/
  3. cập nhật NAMESPACE, xác minh rằng useDynLib(packagename, .registration = TRUE)
  4. Nếu cần thiết, thay thế các exportPattern với export(list of object to be exported)

CẬP NHẬT 18 tháng 7

Theo ghi nhận của @Symbolix sử dụng phiên bản mới nhất của R và DevTools RStudio của điểm 2. (init.c các tập tin) xuất hiện được xử lý bởi một trong hai devtools (sử dụng số kiểm tra RStudio) hoặc các gói công cụ.

+0

Tôi đang sử dụng '@useDynLib pkg fun' trong gói' devtools' để đăng ký các hàm C. [Nhưng có vẻ như có nhiều hơn thế.] (Https://www.r-project.org/doc/Rnews/Rnews_2001-3.pdf#section*.51) – Crops

+1

Tôi có cùng một vấn đề - tôi đã sử dụng đề xuất của bạn và đây là kết quả: Không tìm thấy cuộc gọi đến: 'R_registerRoutines' Điều đó có nghĩa là nó đã tìm thấy câu lệnh R_useDynamicSymbols. Nhưng tôi tự hỏi bây giờ, tại sao các lỗi registerRoutines cũng không biến mất ... – stats0007

+1

Không phải thực tế là tôi đang tạo ra.C gọi với funtionname thay vì "functionName" và không có package = "mypackage" chỉ ra rằng đăng ký thực sự hoạt động ...? – stats0007

3

Tôi gặp sự cố liên tục với gói xây dựng Windows. (.dll thay vì .so)

Câu trả lời được chấp nhận ở trên cũng nên giải quyết vấn đề này cho Windows, nhưng nếu nó không giải quyết được. Đảm bảo rằng objdump.exe đang trỏ vòm thích hợp. tức là .../Mingw_64/bin/objdump.exe. Điều này có thể được kiểm tra từ một dấu nhắc lệnh với which objdump.exe. Bằng cách nào đó, objdump.exe 32 bit tìm được đường vào vị trí ưu tiên cao hơn trong đường dẫn của tôi. Vòm không khớp này sẽ tạo ra lỗi File format not recognized.

Các vấn đề liên quan