Skip to content

File io error for sourceCpp of a readonly file #1345

Closed

Description

Image for: Description

Motivation

Image for: Motivation

I am attempting to create a Nix package for an R application which uses Rcpp.

The nature of Nix is that all installed files are readonly in the Nix store.

Attempting to sourceCpp such an installed C++ file results in a file io error.

This is a showstopper for Nix packaging of anything using Rcpp I think. I can understand no good reason for not supporting readonly C++ sources.

Evidence

Image for: Evidence

Working example with writable C++ source:

it23677> Rscript hello-rcpp-world.R
Loading required package: Rcpp
/nix/store/106z10g87sccpaw7n8pnwlalhpxnc85q-R-4.3.3/lib/R/bin/R CMD SHLIB -o 'sourceCpp_2.so' 'hello-cpp-world.cpp'
using C++ compiler: ‘g++ (GCC) 13.2.0’
/nix/store/i53w7x986ifmgzvb8da6zkfms4xzmdrk-gcc-wrapper-13.2.0/bin/c++ -std=gnu++17 -I"/nix/store/106z10g87sccpaw7n8pnwlalhpxnc85q-R-4.3.3/lib/R/include" -DNDEBUG   -I"/nix/store/yh83cz7v3vjw6r7nk05d55mkj77m3g3f-r-Rcpp-1.0.12/library/Rcpp/include" -I"/home/guestsi/vc/agr-github/RCpp-readonly-file-io-error"     -fpic  -g -O2  -c hello-cpp-world.cpp -o hello-cpp-world.o
/nix/store/i53w7x986ifmgzvb8da6zkfms4xzmdrk-gcc-wrapper-13.2.0/bin/c++ -std=gnu++17 -shared -L/nix/store/106z10g87sccpaw7n8pnwlalhpxnc85q-R-4.3.3/lib/R/lib -o sourceCpp_2.so hello-cpp-world.o -L/nix/store/106z10g87sccpaw7n8pnwlalhpxnc85q-R-4.3.3/lib/R/lib -lR
Hello CPP World

Making it readonly breaks things:

it23677> chmod 444 hello-cpp-world.cpp
it23677> Rscript hello-rcpp-world.R
Loading required package: Rcpp
Error: file io error: '/tmp/RtmpCCsssI/sourceCpp-x86_64-pc-linux-gnu-1.0.12/sourcecpp_277bc8f7c72b/hello-cpp-world.cpp'
Execution halted
Exception: Rscript exited with 1
  [tty 10]:1:1-27: Rscript hello-rcpp-world.R

hello-rcpp-world.R source:

require(Rcpp)

sourceCpp(file = "hello-cpp-world.cpp", showOutput = TRUE)

hello_cpp_world()

hello-cpp-world.cpp source:

#include <iostream>
using namespace std;

// [[Rcpp::export]]
void hello_cpp_world() {
  cout << "Hello CPP World" << endl;
}

Version and Platform

Image for: Version and Platform

I am using Rcpp 1.0.12 with R 4.3.3 on NixOS 24.11. (NixOS is a Linux distro built with Nix.)

Metadata

Image for: Metadata

Metadata

Image for: Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    Image for: Issue actions