2

私は最近、OS X 10.9.1 のコマンド ライン ツールを使用して C++11 と Xcode 5 に移行し、Homebrew を使用してブースト 1.55 をインストールし、コンパイラを g++ から clang++ に変更しました (この投稿で述べたように: Error when with Xcode 5.0 and Rcpp ) . コンパイラの変更により、R での実行時に Rcpp が修正されました。

RInside を再ダウンロードして tar を解凍し、examples/standard ディレクトリに移動してmake cleanand を実行しましたmake all。このディレクトリから STL がリンクされていないようです。Makefile 内の適切な STL への RInside リンクを作成するにはどうすればよいですか?

別のプロジェクトでNetbeansのSTLを使用しており、clang ++を使用したビルドがそこで機能します。ただし、Netbeans で RInside プロジェクトを試すと、同じ問題が発生しますUndefined symbols for architecture x86_64。STL または RInside の 64 ビット バージョンをどこかにダウンロードする必要がありますか?

どこかで構成を更新/変更する必要がありますか?間違ったパッケージをダウンロードしましたか?それとも、変更が必要なサンプルの 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)
4

2 に答える 2

1

OS X 10.9.1 で Xcode 4.6.3 にダウングレードし、clang++ と C++11 を使用した後 (Netbeans の設定にその他の変更はありません)、Netbeans で動作するサンプルを取得しました。C++98 を使用して g++ (または clang++) でも動作しました。libc++Xcode 5 のデフォルト ライブラリは(C++11 をサポートする LLVM C++ 標準ライブラリ)のように見えますが、これをリンクするために必要だったのはlibstdc++(GNU C++ 標準ライブラリ - 以前の Xcode バージョンのデフォルト ライブラリ) でした。~/.R/Makevars ファイルを変更した後CXXFLAGS="-stdlib=libstdc++ -std=c++11 -mtune=native -g -O3 -Wall -pedantic -Wconversion"clang++ビルドするサンプルを取得しました。Xcode 5に再アップグレードし、Netbeansで同じエラーを取得することで動作を確認しましたが、サンプルでは発生しませんでした(libstdc++フラグのためにビルドされました)。-stdlib=libstdc++Netbeans に追加フラグとして追加すると、再度ビルドされました。

他の誰かが例の構築に問題が発生した場合の参考までに。Netbeans では、コンパイルとリンクの手順は次のとおりです。

"/Applications/Xcode.app/Contents/Developer/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
"/Applications/Xcode.app/Contents/Developer/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-MacOSX/callingrproject
mkdir -p build/Debug/GNU-MacOSX
rm -f "build/Debug/GNU-MacOSX/main.o.d"
clang++ -stdlib=libstdc++   -c -g -I. -I/Library/Frameworks/R.framework/Resources/include -I/Library/Frameworks/R.framework/Resources/library/Rcpp/include -I/Library/Frameworks/R.framework/Resources/library/RInside/include -I/usr/local/Cellar -std=c++98 -MMD -MP -MF "build/Debug/GNU-MacOSX/main.o.d" -o build/Debug/GNU-MacOSX/main.o main.cpp
mkdir -p dist/Debug/GNU-MacOSX
clang++ -o dist/Debug/GNU-MacOSX/callingrproject build/Debug/GNU-MacOSX/main.o -L/Library/Frameworks/R.framework/Resources/lib -L/Library/Frameworks/R.framework/Resources/library/Rcpp/lib -L/Library/Frameworks/R.framework/Resources/library/RInside/lib -L/Library/Frameworks/R.framework/Libraries -L/Library/Frameworks/R.framework/Resources/lib -L/Library/Frameworks/R.framework/Resources/library -L/Library/Frameworks/R.framework/Resources/modules -lRcpp -lRInside -lRlapack -lRblas -F/Library/Frameworks/R.framework/.. -framework R -stdlib=libstdc++

ビルド例は次のとおりです。

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 -stdlib=libstdc++ -std=c++11 -mtune=native -g -O3 -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
于 2014-01-19T12:18:40.443 に答える