[Rcpp-devel] Getting different build commands on Linux vs. Mac OS
Dirk Eddelbuettel
edd at debian.org
Mon Apr 30 17:27:41 CEST 2018
On 30 April 2018 at 06:48, Evan Biederstedt wrote:
| Dear list
|
| I have the following R package which is interacting with a C library via
| Rcpp and extern. At some point, the goal is to combine these....but I'm
| trying this with baby steps.
|
| R package with C++ wrapper:
| https://github.com/d-lo/bambi
Ok, so src/Makevars wants three libraries:
PKG_LIBS= -lbamdb -llmdb -lhts
|
| The C library:
| https://github.com/d-lo/bamdb
|
| When I try to install the R package on Linux, the Makevars appears use the
| compiler g++, and it installs correctly:
|
|
| ```
| Installing package into '/home/username/R/x86_64-pc-linux-gnu-library/3.2'
| (as 'lib' is unspecified)
| * installing *source* package 'bambi' ...
| ** libs
| g++ -std=c++11 -I/usr/share/R/include -DNDEBUG -I../inst/include/
| -I"/usr/lib/R/site-library/Rcpp/include" -fpic -g -O2
| -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
| -D_FORTIFY_SOURCE=2 -g -c RcppExports.cpp -o RcppExports.o
| g++ -std=c++11 -I/usr/share/R/include -DNDEBUG -I../inst/include/
| -I"/usr/lib/R/site-library/Rcpp/include" -fpic -g -O2
| -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time
| -D_FORTIFY_SOURCE=2 -g -c bambi.cpp -o bambi.o
| g++ -std=c++11 -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions
| -Wl,-z,relro -o bambi.so RcppExports.o bambi.o -lbamdb -llmdb -lhts
| -L/usr/lib/R/lib -lR
and here we get them as libbamdb.so, liblmdb.so, libhts.so are all system
level libraries and (I guess) 'sudo ldconfig -p' shows them. Linking works,
and they are found as the package loads.
| installing to /home/username/R/x86_64-pc-linux-gnu-library/3.2/bambi/libs
| ** R
| ** preparing package for lazy loading
| ** help
| *** installing help indices
| ** building package indices
| ** testing if installed package can be loaded
| * DONE (bambi)
| > library(bambi)
| ```
|
| Here's what I see when I do the same on Mac OS. It uses clang++, and has
| entirely different build commands:
|
| ```
|
| * installing to library
| ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library’
|
| * installing *source* package ‘bambi’ ...
|
| ** libs
|
| clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
| -I"/Library/Frameworks/R.framework/Versions/3.4/Resources/library/Rcpp/include"
| -I/usr/local/include -fPIC -Wall -g -O2 -c RcppExports.cpp -o
| RcppExports.o
|
| clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
| -I"/Library/Frameworks/R.framework/Versions/3.4/Resources/library/Rcpp/include"
| -I/usr/local/include -fPIC -Wall -g -O2 -c bambi.cpp -o bambi.o
|
| clang++ -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG
| -I"/Library/Frameworks/R.framework/Versions/3.4/Resources/library/Rcpp/include"
| -I/usr/local/include -fPIC -Wall -g -O2 -c rcpp_hello_world.cpp -o
| rcpp_hello_world.o
|
| 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/lib -o
| bambi.so RcppExports.o bambi.o rcpp_hello_world.o
| -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework
| -Wl,CoreFoundation
I think they should show up here too, but they do not.
Are the libraries installed on the macOS box? Could you compile and link a
trivial test program against them?
Dirk
| installing to
| /Library/Frameworks/R.framework/Versions/3.4/Resources/library/bambi/libs
|
| ** R
|
| ** 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 ‘bambi’ in dyn.load(file,
| DLLpath = DLLpath, ...):
|
| unable to load shared object
| '/Library/Frameworks/R.framework/Versions/3.4/Resources/library/bambi/libs/bambi.so':
|
| dlopen(/Library/Frameworks/R.framework/Versions/3.4/Resources/library/bambi/libs/bambi.so,
| 6): Symbol not found: _get_bam_rows
|
| Referenced from:
| /Library/Frameworks/R.framework/Versions/3.4/Resources/library/bambi/libs/bambi.so
|
| Expected in: flat namespace
|
| in
| /Library/Frameworks/R.framework/Versions/3.4/Resources/library/bambi/libs/bambi.so
|
| Error: loading failed
|
| Execution halted
|
| ERROR: loading failed
|
| * removing
| ‘/Library/Frameworks/R.framework/Versions/3.4/Resources/library/bambi’
|
| ```
|
| Why is there this discrepancy? How do I direct the Makevars to use g++ and
| give me the "correct" build as I see on Linux? `CXX=g++` or
| `CXX=/usr/local/bin/g++` doesn't appear to work.
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the Rcpp-devel
mailing list