Generally, you cannot link directly to a shared library in another package. You 
can access *routines* in another package using the LinkingTo: API (see R-ext 
5.4.3), but not a library. You can also use static libraries on another 
packages (see R-ext 5.8) - but never a shared library.

Cheers,
Simon


> On Jan 18, 2018, at 7:51 PM, Wei-Chen Chen <wccs...@gmail.com> wrote:
> 
> Dear List Members,
> 
> I knew linking with other shared library in mac may be tricky, but I
> thought it may save some space and worth a try.
> 
> The messages below are from a CRAN check recently from "
> https://www.r-project.org/nosvn/R.check/r-release-osx-x86_64/JuniperKernel-
> 00install.txt". It obtained the correct paths (to libzmq.5.dylib) from a
> package pbdZMQ, then set them for compiling and linking to the target
> package JuniperKernel. However, the results at "install_name_tool" showed
> that the path to the shared library is not what it said at linking time.
> Therefore, later on at the run time the dyn.load() will not be able to find
> the shared library.
> 
> The questions are:
> 1) How did this happen?
> 2) What path and what clang flags I should use in this case?
> 3) Is there an easy way to resolve this issue? (e.g. Would it work by
> adding pbdZMQ to the "Depends:"?)
> 
> Sincerely,
> Wei-Chen Chen
> 
> 
> * installing *source* package ‘JuniperKernel’ ...
> ** package ‘JuniperKernel’ successfully unpacked and MD5 sums checked
> 
> ************** Results of JuniperKernel package configure **************
> 
>>> RSCRIPT = /Library/Frameworks/R.framework/Resources/bin/Rscript
>>> PBD_ZMQ = 
>>> /Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/pbdZMQ
>>> ZMQ_CPPFLAGS = 
>>> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/pbdZMQ/zmq/include"
>>> ZMQ_LDFLAGS = 
>>> -L"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/pbdZMQ/libs"
>>>  -lzmq.5
> 
> ************************************************************************
> 
> ** libs
> clang++ -std=gnu++11
> -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
> -I../inst/include/ -I.
> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/pbdZMQ/zmq/include"
> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/Rcpp/include"
> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/gdtools/include"
> -I/usr/local/include   -fPIC  -Wall -g -O2 -c RcppExports.cpp -o
> RcppExports.o
> clang++ -std=gnu++11
> -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
> -I../inst/include/ -I.
> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/pbdZMQ/zmq/include"
> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/Rcpp/include"
> -I"/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/gdtools/include"
> -I/usr/local/include   -fPIC  -Wall -g -O2 -c juniper.cpp -o juniper.o
> clang++ -std=gnu++11 -dynamiclib -Wl,-headerpad_max_install_names
> -undefined dynamic_lookup -single_module -multiply_defined suppress
> -L/Library/Frameworks/R.framework/Resources/lib -L/usr/local/lib -o
> JuniperKernel.so RcppExports.o juniper.o
> -L/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/Rlib/3.4/pbdZMQ/libs
> -lzmq.5 -F/Library/Frameworks/R.framework/.. -framework R
> -Wl,-framework -Wl,CoreFoundation
> installing via 'install.libs.R' to
> /Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/results/3.4/JuniperKernel.Rcheck/JuniperKernel
> 
> Before install_name_tool (in install.libs.R):
> [1] 
> "/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/results/3.4/JuniperKernel.Rcheck/JuniperKernel/libs/JuniperKernel.so:"
> [2] "\tJuniperKernel.so (compatibility version 0.0.0, current version
> 0.0.0)"
> [3] 
> "\t/Library/Frameworks/R.framework/Versions/3.4/Resources/library/pbdZMQ/libs/libzmq.5.dylib
> (compatibility version 7.0.0, current version 7.2.0)"
> [4] "\t/Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libR.dylib
> (compatibility version 3.4.0, current version 3.4.3)"
> [5] 
> "\t/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
> (compatibility version 150.0.0, current version 1259.11.0)"
> [6] "\t/usr/local/clang4/lib/libc++.1.dylib (compatibility version
> 1.0.0, current version 1.0.0)"
> [7] "\t/usr/lib/libSystem.B.dylib (compatibility version 1.0.0,
> current version 1226.10.1)"
> ** R
> ** inst
> ** preparing package for lazy loading
> ** help
> *** installing help indices
> ** building package indices
> ** testing if installed package can be loaded
> Error: package or namespace load failed for ‘JuniperKernel’ in
> dyn.load(file, DLLpath = DLLpath, ...):
> unable to load shared object
> '/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/results/3.4/JuniperKernel.Rcheck/JuniperKernel/libs/JuniperKernel.so':
>  
> dlopen(/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/results/3.4/JuniperKernel.Rcheck/JuniperKernel/libs/JuniperKernel.so,
> 6): Library not loaded:
> /Library/Frameworks/R.framework/Versions/3.4/Resources/library/pbdZMQ/libs/libzmq.5.dylib
>  Referenced from:
> /Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/results/3.4/JuniperKernel.Rcheck/JuniperKernel/libs/JuniperKernel.so
>  Reason: image not found
> Error: loading failed
> Execution halted
> ERROR: loading failed
> * removing 
> ‘/Volumes/SSD-Data/Builds/R-dev-web/QA/Simon/packages/el-capitan-x86_64/results/3.4/JuniperKernel.Rcheck/JuniperKernel’
> 
>       [[alternative HTML version deleted]]
> 
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac@r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac

_______________________________________________
R-SIG-Mac mailing list
R-SIG-Mac@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-mac

Reply via email to