[R-SIG-Mac] Linker warnings and error when building R on Apple silicon

Prof Brian Ripley r|p|ey @end|ng |rom @t@t@@ox@@c@uk
Thu Feb 10 19:11:04 CET 2022

On 10/02/2022 17:28, Mikael Jagan wrote:
> Oops - forgot to mention: I am trying to build R-devel, currently at 
> r81706.
> Mikael
> On 2022-02-10 12:13 pm, Mikael Jagan wrote:
>> Hello,
>> I am running Big Sur on an M1 Mac and trying to build R from sources.
>> Some system details:
>> R> sessionInfo()
>>  > Platform: aarch64-apple-darwin20 (64-bit)
>>  > Running under: macOS Big Sur 11.6.3
>> $ clang --version
>>  > Apple clang version 13.0.0 (clang-1300.0.29.30)
>>  > Target: arm64-apple-darwin20.6.0
>> $ /opt/R/arm64/gfortran/bin/gfortran --version
>>  > GNU Fortran (GCC) 11.0.0 20201219 (experimental)
>> It has been a few months since I last built R on this machine.
>> At the time, I was building with LLVM clang rather than Apple clang
>> to obtain OpenMP support. I was recently nudged about the OpenMP
>> runtime library made available here:
>> https://mac.r-project.org/openmp/
>> which would allow me to build "normally" with Apple clang.
>> I am trying now to make the switch.
>> I have installed all of the binaries hosted here
>> https://mac.r-project.org/bin/darwin20/arm64/
>> rather than those hosted here
>> https://mac.r-project.org/libs-arm64/
>> which I had previously installed. (Though: the first URL is missing
>> binaries for gfortran, pandoc, tcl, tk, and tkTable. I obtained
>> these from the second URL. _Both_ URLs are missing a zlib binary,
>> so I reluctantly obtained zlib from Homebrew.)

zlib is part of the OS.  For pkg-config you need the zlib stub available 
from https://mac.r-project.org/libs-4/.  That *is* in the R-admin 
manual.  Also, that tcl, tk, and tkTable can be installed as part of an 
R binary installation.

For pandoc I use the official Intel builds under emulation without any 
problems (including checking all of CRAN).  But you don't need pandoc to 
build R.

I understand that the transition to https://mac.r-project.org/bin is 
work in progress, but its newer versions of libs are preferred.

>> Anyway, I'm running into trouble now... I have attached my
>> config.site, config.log, and build.out (from 'make >&') ...
>> config.log seems completely normal, but in build.out I see
>> many linker warnings of the form
>>  > ld: warning: could not create compact unwind for _dchdc_: registers 
>> 72 and 73 not saved contiguously in frame
>>  > ld: warning: could not create compact unwind for _dpoco_: registers 
>> 72 and 73 not saved contiguously in frame
>>  > ld: warning: object file 
>> (/opt/R/arm64/lib/libreadline.a(history.o)) was built for newer macOS 
>> version (20.0) than being linked (11.0)
>>  > ld: warning: object file 
>> (/opt/R/arm64/lib/liblzma.a(liblzma_la-alone_decoder.o)) was built for 
>> newer macOS version (20.0) than being linked (11.0)

Hmm, that's about a binary liblzma.  I'd download again (maybe try both 
sites), and if it is still wrong, build from the sources.
>> And the build eventually fails for a seemingly unrelated
>> reason:
>>  > clang -arch arm64 -dynamiclib -Wl,-headerpad_max_install_names 
>> -undefined dynamic_lookup -single_module -multiply_defined suppress 
>> -falign-functions=64 -g -O2 -Wall -pedantic 
>> -Wno-implicit-function-declaration -flto=thin -fPIC 
>> -Wl,-mllvm,-threads=4 -L/opt/homebrew/opt/zlib/lib -L/opt/R/arm64/lib 
>> -L/usr/local/lib -lomp -o tools.so text.o init.o Rmd5.o md5.o 
>> signals.o install.o getfmts.o http.o gramLatex.o gramRd.o pdscan.o 
>> -Wl,-framework -Wl,CoreFoundation
>> mkdir ../../../../library/tools/libs
>>  > installing 'sysdata.rda'
>>  > Error in dyn.load(file, DLLpath = DLLpath, ...) :
>>  >   unable to load shared object 
>> '/Users/mikael/Desktop/R/R-devel-build/library/tools/libs/tools.so':
>>  >   
>> dlopen(/Users/mikael/Desktop/R/R-devel-build/library/tools/libs/tools.so, 
>> 6): Symbol not found: _INTEGER
>>  >   Referenced from: 
>> /Users/mikael/Desktop/R/R-devel-build/library/tools/libs/tools.so
>>  >   Expected in: flat namespace
>>  >  in /Users/mikael/Desktop/R/R-devel-build/library/tools/libs/tools.so
>>  > Error: unable to load R code in package 'tools'
>>  > Execution halted
>> I've seen (and ignored) the "compact unwind" warnings before.
>> I've come across suggestions to append '-Wl,-no_compact_unwind'
>> to LDFLAGS, but it is not obvious to me that that is safe.

They can be ignored: they are from the use of gfortran which does not 
fully use Apple conventions.

>> The warnings about macOS version mismatch are new, and strange,
>> given that 20 is my Darwin version and 11 is my macOS version.
>> I have tried all of
>> CC=clang
>> CC="clang -target arm64-apple-macos11"   [copied from an example in 
>> R-admin]
>> CC="clang -arch arm64"                   [copied from CRAN's Makeconf]
>> (and similarly for CXX) to no avail. I can trick the linker
>> with '-target arm64-apple-macos20' but that doesn't seem safe
>> either.

But that is not the issue, which is

 >> 6): Symbol not found: _INTEGER

Now tools.so should require that symbol, and it is linked to libR.dylib
which supplies it:

auk2% nm -g library/tools/libs/tools.so | grep _INTEGER
                  U _INTEGER

auk2% otool -L library/tools/libs/tools.so
	tools.so (compatibility version 0.0.0, current version 0.0.0)
	libR.dylib (compatibility version 4.2.0, current version 4.2.0)
	/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1856.105.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 1311.0.0)

auk2% nm -g lib/libR | grep _INTEGER
libR.dylib*       libRblas.dylib*   libRlapack.dylib*
auk2% nm -g lib/libR.dylib  | grep _INTEGER
0000000000103490 T _INTEGER

which comes from

auk2% nm -g src/main/memory.o | grep _INTEGER
00000000000066a8 T _INTEGER

So my next step would be to investigate the building of libR.dylib.

BTW, if one symbol is missing likely many are -- linkers usually only 
report the first one they encounter.

>> I'd be grateful for any hints on how to get things working,
>> again.
>> Mikael

Brian D. Ripley,                  ripley using stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford

More information about the R-SIG-Mac mailing list