2012-06-28 51 views
0

我们是一个开发包含C/C++代码的R软件包的团队。该软件包可以成功安装在所有机器上,但只有一个。这些都运行相同版本的Mac OS X.我提供了用于在我的计算机上安装软件包(成功)和同事计算机(错误)的日志文件。该软件包取决于Rcpp软件包和GSL库,它们都已成功安装在两台机器上。在所有机器上R软件包安装成功,但只有一个

我的电脑

WARNING: ignoring environment value of R_HOME 
* installing to library '/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15' 
* installing *source* package 'mrenci' ... 
** libs 
*** arch - x86_64 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c MRMRTree.cc -o MRMRTree.o 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c Matrix.cc -o Matrix.o 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c MiMBuilder.cc -o MiMBuilder.o 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c SymmetricMatrix.cc -o SymmetricMatrix.o 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c adaptor.cc -o adaptor.o 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c memory.cc -o memory.o 
/opt/local/bin/g++-mp-4.5 -I/opt/local/lib/R/include -I/opt/local/lib/R/include/x86_64 -DNDEBUG -fopenmp -fopenmp -I/opt/local/include -I"/Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/include" -fPIC -pipe -O2 -m64 -c tools.cc -o tools.o 
/opt/local/bin/g++-mp-4.5 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/opt/local/lib -o mrenci.so MRMRTree.o Matrix.o MiMBuilder.o SymmetricMatrix.o adaptor.o memory.o tools.o /Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/Rcpp/lib/x86_64/libRcpp.a -fopenmp -fopenmp -L/opt/local/lib/R/lib/x86_64 -lR 
installing to /Users/dejayn/R/x86_64-apple-darwin10.8.0-library/2.15/mrenci/libs/x86_64 
** R 
** preparing package for lazy loading 
** testing if installed package can be loaded 

* DONE (mrenci) 

同事的电脑

WARNING: ignoring environment value of R_HOME 
* installing to library '/Library/Frameworks/R.framework/Versions/2.15/Resources/library' 
* installing *source* package 'mrenci' ... 
** libs 
*** arch - x86_64 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c MRMRTree.cc -o MRMRTree.o 
MRMRTree.cc: In member function 'double* const MRMRTree::bootstrap(unsigned int)': 
MRMRTree.cc:73: warning: iteration variable 'i' is unsigned 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c Matrix.cc -o Matrix.o 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c MiMBuilder.cc -o MiMBuilder.o 
MiMBuilder.cc: In member function 'Matrix* const MiMBuilder::createMiM(unsigned int*, unsigned int, unsigned int*, unsigned int)': 
MiMBuilder.cc:102: warning: iteration variable 'i' is unsigned 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c SymmetricMatrix.cc -o SymmetricMatrix.o 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c adaptor.cc -o adaptor.o 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c memory.cc -o memory.o 
g++ -arch x86_64 -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/include/x86_64 -DNDEBUG  -fopenmp -I/usr/local/include -I"/Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/include"   -fPIC  -g -O2  -c tools.cc -o tools.o 
g++ -arch x86_64 -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress -L/usr/local/lib -o mrenci.so MRMRTree.o Matrix.o MiMBuilder.o SymmetricMatrix.o adaptor.o memory.o tools.o /Library/Frameworks/R.framework/Versions/2.15/Resources/library/Rcpp/lib/x86_64/libRcpp.a -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework -Wl,CoreFoundation 
installing to /Library/Frameworks/R.framework/Versions/2.15/Resources/library/mrenci/libs/x86_64 
** R 
** preparing package for lazy loading 
** testing if installed package can be loaded 
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
 unable to load shared object '/Library/Frameworks/R.framework/Versions/2.15/Resources/library/mrenci/libs/x86_64/mrenci.so': 
 dlopen(/Library/Frameworks/R.framework/Versions/2.15/Resources/library/mrenci/libs/x86_64/mrenci.so, 6): Symbol not found: _GOMP_critical_name_end 
 Referenced from: /Library/Frameworks/R.framework/Versions/2.15/Resources/library/mrenci/libs/x86_64/mrenci.so 
 Expected in: flat namespace 
in /Library/Frameworks/R.framework/Versions/2.15/Resources/library/mrenci/libs/x86_64/mrenci.so 
Error: loading failed 
Execution halted 
ERROR: loading failed 
* removing '/Library/Frameworks/R.framework/Versions/2.15/Resources/library/mrenci' 

起初,我的同事电脑上安装将导致包的编译两种架构,在其中g ++抱怨一个未知的-arch的说法。然而,这个问题似乎通过强制定位单一架构x86_64而得到缓解。还值得注意的是,由于这些错误,所有计算机现在都有几个版本的R和g ++。这是链接器的问题吗? R和它的包是否需要使用相同的编译器?在我的电脑的情况下,我从来没有明确要求使用g++-mp-4.5而不是默认的g ++(版本4.2),所以我认为R会自动检测它。

如果这是任何帮助,这里是我的Makevars包含:

PKG_LIBS=`$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` $(SHLIB_OPENMP_CFLAGS) -fopenmp 
PKG_CPPFLAGS=$(SHLIB_OPENMP_CXXFLAGS) -fopenmp 
PKG_CFLAGS=$(SHLIB_OPENMP_CFLAGS) -fopenmp 

$(SHLIB_OPENMP_*FLAGS)标志似乎只有我的计算机上定义;明确添加了-fopenmp标志以使软件包可以在所有机器上工作。

有没有人遇到类似的问题?任何帮助,将不胜感激。

+0

似乎有很多细节仍然在这个问题中失踪。 –

+0

告诉我什么细节不见了,我会尽我所能提供。 –

+0

XCode的版本? .Rprofile文件似乎也不同,因为被引用的库似乎不同。 –

回答

0

我改变了我的同事的~/.R/Makevars符合我的configs

LDFLAGS=-L/opt/local/lib 
CC=/opt/local/bin/gcc-mp-4.5 -std=gnu99 
CXX=/opt/local/bin/g++-mp-4.5 
CPP=/opt/local/bin/gcc-mp-4.5 -std=gnu99 -E 
CXXCPP=/opt/local/bin/g++-mp-4.5 -E 
CFLAGS=-pipe -O2 -m64 
CXXFLAGS=-pipe -O2 -m64 
SHLIB_CXXLD=/opt/local/bin/g++-mp-4.5 
SHLIB_CXXLDFLAGS=-dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress 
SHLIB_LD=/opt/local/bin/gcc-mp-4.5 -std=gnu99 
SHLIB_LDFLAGS=-dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup -single_module -multiply_defined suppress 

此外,在发出安装命令时使用了--no-multiarch说法。现在它可以在他的电脑上运行。

问题是因为在代码里面使用openMP是硬连线的(没有检查),并且clang不支持openMP在我问这个问题。当我们尝试通过Mac端口使用gcc时,我的同事的R使用默认的(Xcode)编译器进行安装。