Building Rmath standalone library with MSVC

133 Views Asked by At

I was looking towards building Rmath shared libray with MSVC. I googled, but could not find much on it. However I came across this thread in r-help group for which there was no reply: https://stat.ethz.ch/pipermail/r-help/2006-June/107720.html

So to try myself, I installed MSVC 2022 community edition. Also made cmake and ninja available in PATH.

From Developer Powershell in Rmath (clone it) folder


├───include
│   └───R_ext
└───src
    └───standalone

I executed:

mkdir build
cd build 
cmake ..\CMakeLists.txt -GNinja 

The build configures fine:

PS C:\Users\suman\rmath\build> cmake ..\CMakeLists.txt -GNinja
-- The C compiler identification is MSVC 19.37.32824.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: D:/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.37.32822/bin/Hostx86/x86/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done (1.4s)
-- Generating done (0.0s)
-- Build files have been written to: C:/Users/suman/rmath/build

But does not generate shared library, instead throws the error:

PS C:\Users\suman\rmath\build> ninja
[1/123] Building C object CMakeFiles\Rmath.dir\src\bessel_j.c.obj
FAILED: CMakeFiles/Rmath.dir/src/bessel_j.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\bessel_j.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\bessel_j.c
C:\Users\suman\rmath\src\bessel_j.c(54): error C2124: divide or mod by zero
[2/123] Building C object CMakeFiles\Rmath.dir\src\choose.c.obj
FAILED: CMakeFiles/Rmath.dir/src/choose.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\choose.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\choose.c
C:\Users\suman\rmath\src\choose.c(81): error C2124: divide or mod by zero
[3/123] Building C object CMakeFiles\Rmath.dir\src\beta.c.obj
FAILED: CMakeFiles/Rmath.dir/src/beta.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\beta.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\beta.c
C:\Users\suman\rmath\src\beta.c(67): error C2124: divide or mod by zero
[4/123] Building C object CMakeFiles\Rmath.dir\src\bessel_k.c.obj
FAILED: CMakeFiles/Rmath.dir/src/bessel_k.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\bessel_k.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\bessel_k.c
C:\Users\suman\rmath\src\bessel_k.c(54): error C2124: divide or mod by zero
[5/123] Building C object CMakeFiles\Rmath.dir\src\bd0.c.obj
FAILED: CMakeFiles/Rmath.dir/src/bd0.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\bd0.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\bd0.c
C:\Users\suman\rmath\src\bd0.c(50): error C2124: divide or mod by zero
[6/123] Building C object CMakeFiles\Rmath.dir\src\cospi.c.obj
FAILED: CMakeFiles/Rmath.dir/src/cospi.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\cospi.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\cospi.c
C:\Users\suman\rmath\src\cospi.c(36): error C2124: divide or mod by zero
[7/123] Building C object CMakeFiles\Rmath.dir\src\bessel_y.c.obj
FAILED: CMakeFiles/Rmath.dir/src/bessel_y.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\bessel_y.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\bessel_y.c
C:\Users\suman\rmath\src\bessel_y.c(53): error C2124: divide or mod by zero
[8/123] Building C object CMakeFiles\Rmath.dir\src\chebyshev.c.obj
FAILED: CMakeFiles/Rmath.dir/src/chebyshev.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\chebyshev.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\chebyshev.c
C:\Users\suman\rmath\src\chebyshev.c(74): error C2124: divide or mod by zero
[9/123] Building C object CMakeFiles\Rmath.dir\src\bessel_i.c.obj
FAILED: CMakeFiles/Rmath.dir/src/bessel_i.c.obj
"D:\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.37.32822\bin\Hostx86\x86\cl.exe"  /nologo -DRmath_EXPORTS -IC:\Users\suman\rmath\include -IC:\Users\suman\rmath\include\R_ext /DWIN32 /D_WINDOWS /W3 /MD /O2 /Ob2 /DNDEBUG /showIncludes /FoCMakeFiles\Rmath.dir\src\bessel_i.c.obj /FdCMakeFiles\Rmath.dir\ /FS -c C:\Users\suman\rmath\src\bessel_i.c
C:\Users\suman\rmath\src\bessel_i.c(53): error C2124: divide or mod by zero
[10/123] Building C object CMakeFiles\Rmath.dir\src\d1mach.c.obj
ninja: build stopped: subcommand failed.

Careful look shows there is error C2124 for which the compiler is failing. I googled again. Came out with some links:

but could not resolve the issue.

Now I wonder if it is possible to build a shared Rmath standalone library. Any help?

System Information

Host Name:                 DESKTOP-DQQRVHG
OS Name:                   Microsoft Windows 10 Home
OS Version:                10.0.19045 N/A Build 19045
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Workstation
OS Build Type:             Multiprocessor Free
Registered Owner:          N/A
Registered Organization:   N/A
Product ID:                00325-96340-08808-AAOEM
Original Install Date:     5/16/2023, 12:41:04 AM
System Boot Time:          10/6/2023, 7:43:19 PM
System Manufacturer:       Dell Inc.
System Model:              Inspiron 5379
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 142 Stepping 10 GenuineIntel ~1792 Mhz
BIOS Version:              Dell Inc. 1.17.0, 8/18/2021
Windows Directory:         C:\WINDOWS
System Directory:          C:\WINDOWS\system32
Boot Device:               \Device\HarddiskVolume1
System Locale:             en-us;English (United States)
Input Locale:              en-us;English (United States)
Time Zone:                 (UTC+05:45) Kathmandu
Total Physical Memory:     8,025 MB
Available Physical Memory: 1,513 MB
Virtual Memory: Max Size:  14,681 MB
Virtual Memory: Available: 5,625 MB
Virtual Memory: In Use:    9,056 MB
Page File Location(s):     C:\pagefile.sys
Domain:                    WORKGROUP
Logon Server:              \\DESKTOP-DQQRVHG
Hotfix(s):                 11 Hotfix(s) Installed.
                           [01]: KB5029919
                           [02]: KB5028951
                           [03]: KB5003791
                           [04]: KB5011048
                           [05]: KB5015684
                           [06]: KB5030211
                           [07]: KB5025315
                           [08]: KB5026879
                           [09]: KB5028318
                           [10]: KB5028380
                           [11]: KB5029709
Network Card(s):           2 NIC(s) Installed.
                           [01]: Bluetooth Device (Personal Area Network)
                                 Connection Name: Bluetooth Network Connection 2
                                 Status:          Media disconnected
                           [02]: Qualcomm QCA61x4A 802.11ac Wireless Adapter
                                 Connection Name: Wi-Fi
                                 DHCP Enabled:    Yes
                                 DHCP Server:     192.168.1.254
                                 IP address(es)
                                 [01]: 192.168.1.67
                                 [02]: fe80::1607:268:b147:61cc
                                 [03]: 2400:1a00:bc10:d1df:55da:fc0d:f87d:de6a
                                 [04]: 2400:1a00:bc10:d1df:a379:9601:4b2c:d38
                                 [05]: 2400:1a00:bc10:d1df::2
Hyper-V Requirements:      VM Monitor Mode Extensions: Yes
                           Virtualization Enabled In Firmware: Yes
                           Second Level Address Translation: Yes
                           Data Execution Prevention Available: Yes
0

There are 0 best solutions below