[R-SIG-Mac] Problems with runtime linking of R-extension

Ralf Stubner ralf.stubner at r-institute.com
Fri Feb 23 10:16:02 CET 2018


Hi all,

I am trying to port RcppArrayFire
(https://github.com/RInstitute/rcpparrayfire) to Mac OS, but I am having
some troubles with resolving linked libraries. I have tried to reduce
the issue as much as possible, i.e. no Rcpp and no package structure. It
seems to be MacOS specific since the same code works on Linux (as does
RcppArrayFire). I also asked this on stackoverflow
(https://stackoverflow.com/questions/48705490/runtime-linking-r-extension-on-macos),
but that did not draw a lot of attention. Maybe someone on this list can
shed some light on this:

When I install ArrayFire (http://arrayfire.com/) on MacOS using the
binary installer, the libraries are installed in /usr/local/lib with an
install name starting with @rpath:

$ otool -L /usr/local/lib/libaf.dylib /usr/local/lib/libaf.dylib:
	@rpath/libaf.3.dylib (compatibility version 3.0.0, current version 3.5.1)
	/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version
120.1.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 1226.10.1)

 I can compile, link and run simple examples, e.g.

#include <arrayfire.h>
#include <stdio.h>

int main() {
  unsigned int count;
  at_get_backend_count(&count);
  printf("backends: %d\n", count);
  return 0;
}

gives

$ /usr/local/clang4/bin/clang -laf -o minimal minimal.c
$ otool -L minimal
minimal:
	@rpath/libaf.3.dylib (compatibility version 3.0.0, current version 3.5.1)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 1252.0.0)
$ ./minimal
backends: 2


To do the same from R I use

#include <arrayfire.h>
#include <Rinternals.h>
SEXP count_backends() {
  unsigned int count;
  af_get_backend_count(&count);
  Rprintf("backends: %d\n", count);
  return R_NilValue;
}

And compile it with

$ PKG_LIBS=-laf R CMD SHLIB minimal.c /usr/local/clang4/bin/clang
-I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
-I/usr/local/include   -fPIC  -Wall -g -O2  -c minimal.c -o minimal.o
/usr/local/clang4/bin/clang -dynamiclib -Wl,-headerpad_max_install_names
-undefined dynamic_lookup -single_module -multiply_defined suppress
-L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/clang4/lib
-o minimal.so minimal.o -laf -F/Library/Frameworks/R.framework/..
-framework R -Wl,-framework -Wl,CoreFoundation
$ otool -L minimal.so  minimal.so:
	minimal.so (compatibility version 0.0.0, current version 0.0.0)
	@rpath/libaf.3.dylib (compatibility version 3.0.0, current version 3.5.1)
	/Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libR.dylib
(compatibility version 3.4.0, current version 3.4.3)
	/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1451.0.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
version 1252.0.0)

If I then try to load the resulting library, I get this error message:

R> dyn.load("minimal.so")
Error in dyn.load("minimal.so") :   unable to load shared object
'/Users/ralf/Documents/af-simple/minimalR/minimal.so':
  dlopen(/Users/ralf/Documents/af-simple/minimalR/minimal.so, 6):
Library not loaded: @rpath/libaf.3.dylib
  Referenced from: /Users/ralf/Documents/af-simple/minimalR/minimal.so
  Reason: image not found
Execution halted


Both the binary and the R-extension library refer to the external
library using the same install name, but for the R-extension this
reference cannot be resolved. Why is this the case?

Thanks
Ralf

PS: Used versions:
* Mac OS High Siearra
* R 3.4.3
* clang 4.0.0 from https://cran.r-project.org/bin/macosx/tools/

-- 
Ralf Stubner
Senior Software Engineer / Trainer

R Institute GmbH
Dortustraße 48
14467 Potsdam

T: +49 331 23 70 81 66
F: +49 331 23 70 81 67
M: +49 162 20 91 196

Mail: ralf.stubner at r-institute.com

Sitz: Potsdam
Register: AG Potsdam HRB 27966 P
Ust.-IdNr.: DE300072622
Geschäftsführer: Prof. Dr. Dr. Karl-Kuno Kunze



-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4008 bytes
Desc: S/MIME Cryptographic Signature
URL: <https://stat.ethz.ch/pipermail/r-sig-mac/attachments/20180223/d2283ebe/attachment.p7s>


More information about the R-SIG-Mac mailing list