我最近通過OS X 10.9.1上的命令行工具移至C++ 11和Xcode 5,使用Homebrew安裝了boost 1.55,並更改了編譯器從g ++到clang ++(如本文中提到的:Error when with Xcode 5.0 and Rcpp)。在R中運行時,編譯器會更改固定的Rcpp。但是,我在編譯RInside示例時遇到了問題(它曾經工作得很好)。在OS X上使用clang ++構建RInside示例小牛無法在鏈接上找到STL標準庫
我重新下載了RInside並解壓tar,進入了examples/standard目錄,並做了make clean
和make all
。它看起來像任何STL沒有被鏈接到這個目錄。如何使RInside鏈接到Makefile中相應的STL?
我正在使用來自Netbeans的STL在一個單獨的項目和建築使用鏗鏘++在那裏工作。但是,當我在Netbeans上嘗試一個RInside項目時,我遇到了同樣的問題:Undefined symbols for architecture x86_64
。我需要在某處下載64位版本的STL或者RInside嗎?
我是否還需要更新/更改某個地方的配置,我下載了一個錯誤的軟件包,還是需要更改示例的Makefile中的設置?
這裏是make all
第一個電話:
clang++ -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/include -I/Library/Frameworks/R.framework/Versions/3.0/Resources/library/RInside/include -mtune=native -g -O2 -Wall -pedantic -Wconversion -Wall -I/usr/local/include rinside_callbacks0.cpp -F/Library/Frameworks/R.framework/.. -framework R -L/Library/Frameworks/R.framework/Resources/lib -lRblas -L/Library/Frameworks/R.framework/Resources/lib -lRlapack /Library/Frameworks/R.framework/Versions/3.0/Resources/library/Rcpp/lib/libRcpp.a /Library/Frameworks/R.framework/Versions/3.0/Resources/library/RInside/lib/libRInside.a -o rinside_callbacks0
輸出的開頭:
Undefined symbols for architecture x86_64:
"std::string::find_last_of(char, unsigned long) const", referenced from:
demangler_one(char const*) in libRcpp.a(api.o)
"std::string::find(char const*, unsigned long) const", referenced from:
short_file_name(char const*) in libRcpp.a(api.o)
"std::string::size() const", referenced from:
std::basic_string<char, std::char_traits<char>, std::allocator<char> > std::operator+<char, std::char_traits<char>, std::allocator<char> >(char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in libRcpp.a(api.o)
MemBuf::add(std::string const&) in libRInside.a(MemBuf.o)
"std::string::c_str() const", referenced from:
RInside::parseEval(std::string const&, SEXPREC*&) in libRInside.a(RInside.o)
SEXPREC* Rcpp::pairlist<Rcpp::Function, Rcpp::traits::named_object<SEXPREC*>, Rcpp::traits::named_object<SEXPREC*> >(Rcpp::Function const&, Rcpp::traits::named_object<SEXPREC*> const&, Rcpp::traits::named_object<SEXPREC*> const&) in libRInside.a(RInside.o)
short_file_name(char const*) in libRcpp.a(api.o)
string_to_try_error(std::string const&) in libRcpp.a(api.o)
Rcpp::RObject::AttributeProxy::set(SEXPREC*) const in libRcpp.a(api.o)
demangle(std::string const&) in libRcpp.a(api.o)
Rcpp::RObject::AttributeProxy::get() const in libRcpp.a(api.o)
,並在錯誤信息的末尾:
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我只注意到有一個Rcpp11項目。這是否意味着Rcpp和RInside不會在C++ 11中表現出色?當我在Netbeans中設置'--std = C++ 98'時,我得到了同樣的錯誤。我會嘗試降級我的Xcode。 –
編號Rcpp不能/不能,直到R 3.1.0發佈時使用C + 11,因爲CRAN不會接受它。因此,我們在Rcpp中使用它完全是選項 - 但請參閱例如[Rcpp Gallery上的Rcpp和C++ 11上的幾篇文章](http://gallery.rcpp.org/tags/c++11 /)。我們甚至有一個屬性可以根據需要轉換C++ 11。只是不要將C++ 11代碼上傳到CRAN。 –