Skip to content

Problem loading a package libraries (Error in dyn.load) on mac environments

10 messages · Davor Cubranic, Simon Urbanek, Dan Tenenbaum +1 more

#
Hello everyone,

I'm working on a small R package for proteomics analysis, and I am 
facing perplexing problems related to the 'dyn.load' function when 
loading the package on mac environments.
The package relies on two external libraries, expat and pthread, and on 
three cran packages: XML, Rcpp and data.table. I have no trouble 
building, checking or installing the package. But when I load the 
package on mac testing environments, I face various problems related to 
this error message: "Error in dyn.load(file, DLLpath=DLLpath, ...): ..."
On one machine, the package loads without problem on i386 R, but fails 
to load on x64 R; on another machine, things are reversed and the 
package loads on x64, but fails to load on i386.

Here is the output from the machinge where the package loads on i386 but 
fails on x64 R:
Loading required package: XML
Loading required package: Rcpp
Loading required package: data.table
data.table 1.8.6  For help type: help("data.table")
Error in dyn.load(file, DLLpath = DLLpath, ...) :
   unable to load shared object
'/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM/libs/
x86_64/rTANDEM.so':
   
dlopen(/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM
/libs/x86_64/rTANDEM.so, 6): Symbol not found: __ZTIN4Rcpp7RObjectE
   Referenced from:
/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM/libs/x
86_64/rTANDEM.so
   Expected in: dynamic lookup

Error: package or namespace load failed for 'rTANDEM'
R Under development (unstable) (2012-11-27 r61172)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] data.table_1.8.6    Rcpp_0.10.1         XML_3.9-4
[4] BiocInstaller_1.9.4

loaded via a namespace (and not attached):
[1] tools_2.16.0


Here is the ouput from the machine where the package loads fine on x64 R but fails on i386:
Loading required package: XML
Loading required package: Rcpp
Loading required package: data.table
data.table 1.8.6  For help type: help("data.table")
Error in dyn.load(file, DLLpath = DLLpath, ...) :
   unable to load shared object
'/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM/libs/
i386/rTANDEM.so':
   
dlopen(/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM
/libs/i386/rTANDEM.so, 6): Symbol not found: _XML_GetErrorCode
   Referenced from:
/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM/libs/i
386/rTANDEM.so
   Expected in: flat namespace
  in
/Library/Frameworks/R.framework/Versions/2.16new/Resources/library/rTANDEM/libs/i
386/rTANDEM.so
Error: package or namespace load failed for 'rTANDEM'


I am left clueless by this. As anyone faced a similar issue?

Thank you very much for your help!

Frederic
#
Frederic,

do you have the source somewhere so we can test it? It seems like you are not linking against all libraries you need. You won't see this at link time, because symbols are only resolved at run time. Make sure you have all necessary libraries in both 64-bit and 32-bit. Are you using any 3rd party binaries like MacPorts, Fink, Homebrew or similar? They may cause problems...

Cheers,
Simon
On Dec 3, 2012, at 11:34 AM, Frederic Fournier <frederic.bioinfo at gmail.com> wrote:

            
#
Looks like you might not have the 64-bit version of the Rcpp dynamic library installed on the first machine. On the second, check if you have the 32-bit version of both XML and expat's dynamic libraries.

Davor
On 2012-12-03, at 8:34 AM, Frederic Fournier wrote:

            
#
On Mon, Dec 3, 2012 at 11:13 AM, Davor Cubranic <cubranic at stat.ubc.ca> wrote:
Thanks. I'm working with Frederic on this.
On the first machine, both the 32 and 64 bit versions are Rcpp are
installed (I can library(Rcpp) from both R --arch i386 and R --arch
x86_64), and the installed Rcpp has these files present:

pwd
/Library/Frameworks/R.framework/Versions/Current/Resources/library/Rcpp
PETTY:Rcpp biocbuild$ ls -lR libs
total 0
drwxr-xr-x  3 biocbuild  admin  102 Dec  3 11:40 i386
drwxr-xr-x  3 biocbuild  admin  102 Dec  3 11:40 x86_64

libs/i386:
total 1216
-rwxr-xr-x  1 biocbuild  admin  619064 Dec  3 11:40 Rcpp.so

libs/x86_64:
total 1280
-rwxr-xr-x  1 biocbuild  admin  651920 Dec  3 11:40 Rcpp.so
PETTY:Rcpp biocbuild$ ls -lR lib
total 0
drwxr-xr-x  4 biocbuild  admin  136 Dec  3 11:40 i386

lib/i386:
total 11336
-rw-r--r--  1 biocbuild  admin  5177484 Dec  3 11:40 libRcpp.a
-rwxr-xr-x  1 biocbuild  admin   619064 Dec  3 11:40 libRcpp.dylib

After building rTANDEM against this Rcpp, I then get the same error
Frederic reports in this thread when trying to library(rTANDEM) on the
x86_64 architecture. Here it is again with sessionInfo():
Loading required package: XML
Loading required package: Rcpp
Loading required package: data.table
data.table 1.8.6  For help type: help("data.table")
Error in dyn.load(file, DLLpath = DLLpath, ...) :
  unable to load shared object
'/Library/Frameworks/R.framework/Versions/2.16/Resources/library/rTANDEM/libs/x86_64/rTANDEM.so':
  dlopen(/Library/Frameworks/R.framework/Versions/2.16/Resources/library/rTANDEM/libs/x86_64/rTANDEM.so,
6): Symbol not found: __ZTIN4Rcpp7RObjectE
  Referenced from:
/Library/Frameworks/R.framework/Versions/2.16/Resources/library/rTANDEM/libs/x86_64/rTANDEM.so
  Expected in: dynamic lookup

Error: package or namespace load failed for 'rTANDEM'
R Under development (unstable) (2012-10-31 r61060)
Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)

locale:
[1] C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] data.table_1.8.6 Rcpp_0.10.1      XML_3.95-0.1
I'm not sure if Frederic wants the package source to be posted at this
point. I'll let him answer that.

Thanks,
Dan
#
Is rTandem built with the same version of Rcpp that is now installed (0.10.1)? The API changed a fair bit over the past few weeks.

Davor
On 2012-12-03, at 11:52 AM, Dan Tenenbaum wrote:

            
#
On Mon, Dec 3, 2012 at 11:55 AM, Davor Cubranic <cubranic at stat.ubc.ca> wrote:
Yes, in fact I just built Rcpp from source immediately before building
rTANDEM. I get the same results after installing the Rcpp binary from
CRAN. In both cases, I build and then attempt to load rTANDEM with the
exact same version of Rcpp.

Dan
#
On Dec 3, 2012, at 2:52 PM, Dan Tenenbaum <dtenenba at fhcrc.org> wrote:

            
^^ --- this is incomplete - you're missing the 64-bit Rcpp library
#
On Dec 3, 2012, at 2:58 PM, Dan Tenenbaum <dtenenba at fhcrc.org> wrote:

            
CRAN version of Rcpp has both x86_64 and i386 libraries - unlike yours. May I suggest someone with the necessary knowledge respond to my initial e-mail before someone gets killed running of the wrong cliff? ;)

Cheers,
Simon
#
On Mon, Dec 3, 2012 at 12:15 PM, Simon Urbanek
<simon.urbanek at r-project.org> wrote:
Hi Simon, you're right. If Rcpp is removed and then installed from
CRAN (binary version), the installed package then has both x86_64 and
i386 libraries, and rTANDEM then installs on both architectures.

Thanks for your help, sorry for the noise.
Dan