--- title: "02 - Setup" output: litedown::html_format: options: toc: true number_sections: true vignette: > %\VignetteIndexEntry{02 - Setup} %\VignetteEngine{litedown::vignette} %\VignetteEncoding{UTF-8} editor: markdown: wrap: sentence bibliography: ["references.bib"] --- ## C++ Setup You will need a working C++ compiler capable of compiling C++ code using the C++11 standard or newer. To get it: - On Windows, install [Rtools](https://cran.r-project.org/bin/windows/Rtools/). - On Mac, install Xcode from the App Store. - On Linux, `sudo pacman -Syu install build-essential g++-11` or similar. On my laptop, this is the output of `g++ --version`: ```bash g++ (GCC) 15.2.1 20250813 Copyright (C) 2025 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ``` ### For Ubuntu Users After installing `g++-11`, you may still encounter issues compiling C++ code due to missing standard library headers. This does not happen when testing on Manjaro Linux. You can try this: ```bash sudo apt install build-essential g++-11 libc++-11-dev libc++abi-11-dev ``` Then you can attempt to compile a simple example to print a number: ```cpp // save this as 01-print-number.cpp or similar #include // required for the cout function // function to print a message int main() { std::cout << 1 << std::endl; return 0; } ``` Then try to compile and run it with the following bash instruction: ```bash g++ 01-print-number.cpp ./01-print-number # prints "1" ``` Otherwise, not installing the additional packages may lead to the following error: ```bash fatal error: 'cstdio' file not found fatal error: 'vector' file not found cannot find -lc++abi: No such file or directory ``` ## R Setup You can install the R packages `cpp4r`, `tinydev` and `microbenchmark` with the following command: ```r install.packages(c("cpp4r", "tinydev", "microbenchmark")) ``` To verify that R can compile C++ code, you can run `tinydev::check_cpp_compiler()`, which will return an output similar to: ```r using C++ compiler: ‘g++ (GCC) 16.1.1 20260430’ g++ -std=gnu++20 -I"/usr/include/R/" -DNDEBUG -I/usr/local/include -fpic -Wall -O3 -pedantic -c check_cpp_compiler.cpp -o check_cpp_compiler.o g++ -std=gnu++20 -shared -L/usr/lib64/R/lib -Wl,-O1 -Wl,--sort-common -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,pack-relative-relocs -flto=auto -o check_cpp_compiler.so check_cpp_compiler.o -L/usr/lib64/R/lib -lR using C++ compiler: ‘g++ (GCC) 16.1.1 20260430’ add(2, 3) = 5 ```