SlideShare une entreprise Scribd logo
1  sur  6
Télécharger pour lire hors ligne
Rcpp を使って動的もしくは共有ライブラリ
(dylib, so ファイル) を用いた関数(パッ
ケージ)を作る
S.M.
October 26, 2013
Rcpp with Rstudio でビルドする際に、自作でもなんでもよい
が, 共有ライブラリをリンクさせる方法. コンパイルオプション
をどこで指定したらよいかが分からなかったのでまとめておく.
ちなみに, パッケージでなく関数単位で簡易にやりたいと当初思っ
たが, どうもパッケージを作るのが簡易な方法のようである.
動作確認環境は, Rstudio 0.97.248, Rcpp 0.10.5

libhelloworld.dylib と helloworld.h を用意しておく.
内容は察して下さい.

1
[取りあえずやってみる]
1. RStudio の Package with Rcpp を作成
2. llibhelloworld.dylib をパッケージディレクトリ直下に配置
3. src/Makevars を編集
PKG_LIBS = -lhelloworld -L..
‘$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"‘
後はいつも通りでよい.
コンパイル時のディレクトリがパッケージ直下の src なので, -L..
とすることになる.
2
[他の場所にあるライブラリを使いたい]
共有ライブラリをパッケージディレクトリ直下以外に置くとビル
ドできない.
例えば src に置いて, PKG_LIBS の -L.. を -L. に変えてビルド
してみるとダメ.
ビルド実行結果ログをよく見ると,
-L でライブラリの位置を正しく指定していれば, コンパイルは成
功するのだが, その後に実行される動作確認的な library() 実行
時に, 共有ライブラリにパスが通っていないためにロード出来ず, エ
ラーとなっているということが分かる.
従って, 環境変数を設定しておけばいい.
パッケージ直下にライブラリを置く方法も, パッケージ直下のディ
レクトリ外で実行すると失敗することになる.
3
[まとめ:動的または共有ライブラリを使う方法]
1. Makevars ファイルでコンパイルオプション、特にヘッダファイ
ルの指定に PKG_CPPFLAGS を使い, ライブラリパスと名前を PKG_LIBS
で指定する.
2. 動的もしくは共有ライブラリへの実行時の参照を可能にするた
め, OS X であれば DYLD_LIBRARY_PATH を動的ライブラリの保存
場所に設定しておく. Linux なら LD_LIBRARY_PATH になる.

4
※参考: Writing R Extentions
http://cran.r-project.org/doc/manuals/R-exts.pdf
の Makevars ファイルに関する説明の抜粋
The most common use of a‘Makevars’file is to set additional preprocessor options (for
example include paths) for C/C++ files via PKG_CPPFLAGS, and additional compiler flags by
setting PKG_CFLAGS, PKG_CXXFLAGS, PKG_FFLAGS or PKG_FCFLAGS, for C, C++, FORTRAN
or Fortran 9x respectively (see Section 5.5 [Creating shared objects], page 101).
NB: Include paths are preprocessor options, not compiler options, and must be set in
PKG_CPPFLAGS as otherwise platform-specific paths (e.g.‘-I/usr/local/include’ will take
)
precedence.

5

Contenu connexe

Similaire à Rcppを使って動的もしくは共有ライブラリ (dylib, soファイル)を用いた関数(パッ ケージ)を作る

Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法Nagi Teramo
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞYoichi Toyota
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Daisuke Hiraoka
 
lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)Kazuhiro Nishiyama
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発についてTomoya Kawanishi
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。Kouhei Maeda
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionSatomi Tsujita
 
自分的pkgsrcの課題
自分的pkgsrcの課題自分的pkgsrcの課題
自分的pkgsrcの課題Ryo ONODERA
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)baban ba-n
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門Yasuko Ohba
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像Kiwamu Okabe
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Ashitaba YOSHIOKA
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825hiro345
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 

Similaire à Rcppを使って動的もしくは共有ライブラリ (dylib, soファイル)を用いた関数(パッ ケージ)を作る (18)

Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
 
Railsの開発環境作るぞ
Railsの開発環境作るぞRailsの開発環境作るぞ
Railsの開発環境作るぞ
 
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
 
Ruby In Wheezy
Ruby In WheezyRuby In Wheezy
Ruby In Wheezy
 
lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)lilo.linux.or.jp の話 (2017年8月)
lilo.linux.or.jp の話 (2017年8月)
 
Pry による repl 駆動開発について
Pry による repl 駆動開発についてPry による repl 駆動開発について
Pry による repl 駆動開発について
 
とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。とあるWeb企業でのDebianシステムの使い方。
とあるWeb企業でのDebianシステムの使い方。
 
Rails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2editionRails初心者レッスン lesson4 2edition
Rails初心者レッスン lesson4 2edition
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
Fig
FigFig
Fig
 
自分的pkgsrcの課題
自分的pkgsrcの課題自分的pkgsrcの課題
自分的pkgsrcの課題
 
Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)Rubyのコードを読んでみよう(オブジェクト編)
Rubyのコードを読んでみよう(オブジェクト編)
 
Ruby on Rails 入門
Ruby on Rails 入門Ruby on Rails 入門
Ruby on Rails 入門
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
Alfrescoクラスタリング入門
Alfrescoクラスタリング入門Alfrescoクラスタリング入門
Alfrescoクラスタリング入門
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 

Dernier

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 

Dernier (9)

自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

Rcppを使って動的もしくは共有ライブラリ (dylib, soファイル)を用いた関数(パッ ケージ)を作る

  • 1. Rcpp を使って動的もしくは共有ライブラリ (dylib, so ファイル) を用いた関数(パッ ケージ)を作る S.M. October 26, 2013
  • 2. Rcpp with Rstudio でビルドする際に、自作でもなんでもよい が, 共有ライブラリをリンクさせる方法. コンパイルオプション をどこで指定したらよいかが分からなかったのでまとめておく. ちなみに, パッケージでなく関数単位で簡易にやりたいと当初思っ たが, どうもパッケージを作るのが簡易な方法のようである. 動作確認環境は, Rstudio 0.97.248, Rcpp 0.10.5 libhelloworld.dylib と helloworld.h を用意しておく. 内容は察して下さい. 1
  • 3. [取りあえずやってみる] 1. RStudio の Package with Rcpp を作成 2. llibhelloworld.dylib をパッケージディレクトリ直下に配置 3. src/Makevars を編集 PKG_LIBS = -lhelloworld -L.. ‘$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"‘ 後はいつも通りでよい. コンパイル時のディレクトリがパッケージ直下の src なので, -L.. とすることになる. 2
  • 4. [他の場所にあるライブラリを使いたい] 共有ライブラリをパッケージディレクトリ直下以外に置くとビル ドできない. 例えば src に置いて, PKG_LIBS の -L.. を -L. に変えてビルド してみるとダメ. ビルド実行結果ログをよく見ると, -L でライブラリの位置を正しく指定していれば, コンパイルは成 功するのだが, その後に実行される動作確認的な library() 実行 時に, 共有ライブラリにパスが通っていないためにロード出来ず, エ ラーとなっているということが分かる. 従って, 環境変数を設定しておけばいい. パッケージ直下にライブラリを置く方法も, パッケージ直下のディ レクトリ外で実行すると失敗することになる. 3
  • 5. [まとめ:動的または共有ライブラリを使う方法] 1. Makevars ファイルでコンパイルオプション、特にヘッダファイ ルの指定に PKG_CPPFLAGS を使い, ライブラリパスと名前を PKG_LIBS で指定する. 2. 動的もしくは共有ライブラリへの実行時の参照を可能にするた め, OS X であれば DYLD_LIBRARY_PATH を動的ライブラリの保存 場所に設定しておく. Linux なら LD_LIBRARY_PATH になる. 4
  • 6. ※参考: Writing R Extentions http://cran.r-project.org/doc/manuals/R-exts.pdf の Makevars ファイルに関する説明の抜粋 The most common use of a‘Makevars’file is to set additional preprocessor options (for example include paths) for C/C++ files via PKG_CPPFLAGS, and additional compiler flags by setting PKG_CFLAGS, PKG_CXXFLAGS, PKG_FFLAGS or PKG_FCFLAGS, for C, C++, FORTRAN or Fortran 9x respectively (see Section 5.5 [Creating shared objects], page 101). NB: Include paths are preprocessor options, not compiler options, and must be set in PKG_CPPFLAGS as otherwise platform-specific paths (e.g.‘-I/usr/local/include’ will take ) precedence. 5