• ベストアンサー

バージョンの違うライブラリを適宜使い分けたい

linux上にて、バージョンの異なるライブラリをインストールしております。このライブラリを用いて、コンパイル・実行をする際に、バージョンの違うライブラリを適宜使い分けたいのですが、どのようにすると効率的でしょうか? makeを使ってコンパイルしていますが、コンパイルの際に静的リンクを行うのが良いでしょうか?それとも、動的リンクにしておき、実行時にLD_LIBRARY_PATHを設定しなおして動かすのが良いでしょうか?あるいは、上記以外に方法があればアドバイスをもらえればと思います。

  • amu
  • お礼率51% (47/92)

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

やり方としてはお書きの2パターンしかないと思います。 プログラムの個数が少なければ静的リンクで、多ければ動的リンクでしょうか。 動的リンクの場合、あらかじめ何パターンかのLIBPATHnという環境変数を設定しておき、bashのaliasを使って、 alias prog1='LD_LIBRARY_PATH=$LIBPATH1 prog1' のようなのを沢山定義する。

amu
質問者

お礼

ありがとうございます。 静的リンクの場合、特定のライブラリだけを静的リンクという指定の仕方は可能でしょうか?コンパイラによりますでしょうか・・・

その他の回答 (2)

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

No.1 すみません。単なるタイプミスです。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.1

必要な環境変数(LD_LIBRARY_DAT等)に値をセットしたあと makeを実行するシェルを2つ(必要な数分??)作るるに1票

amu
質問者

お礼

ありがとうございます。 LD_LIBRARY_DATというのは、LD_LIBRARY_PATHとはまた違うものでしょうか?

関連するQ&A

  • PATHとLD_LIBRARY_PATHの設定

    solarisまたはlinuxで、ソースインストールする際のPATHとLD_LIBRARY_PATHについての質問です。 1. ソースインストールする際に、事前にPATHやLD_LIBRARY_PATHを設定してから、 ./configure → make をするよう説明しているサイトがありますが、 インストールするときだけPATHやLD_LIBRARY_PATHを変更しても問題ないのでしょうか? たとえば、インストール時に$ export LD_LIBRARY_PATH=/lib:/usr/libとしてインストールしたけど、 実際にサービスを起動する際はLD_LIBRARY_PATHは未設定というような状態のことです。 2. ソースインストールする際、./configureとmakeを実行する一般ユーザのPATHやLD_LIBRARY_PATHの示すパスと、 make installを実行するrootユーザのPATHやLD_LIBRARY_PATHの示すパス(または順番)が異なっていても大丈夫でしょうか? たとえば、一般ユーザはLD_LIBRARY_PATH=/lib:/usr/libだけど、 rootユーザはLD_LIBRARY_PATH=/usr/local/lib:/lib というような状態のことです。 3. exportなどによる一時的な設定ではなく、profieや/etc/ld.so.conf(solarisではcrleによる)などで 固定で設定する場合、注意することはありますか? 個人的に思っているのは、パスの先頭に追加すると既存サービスなどに影響を与える可能性があるので、 最後尾に追加していくことぐらいです。 以上です。よろしくお願いします。

  • ライブラリのアップデート方法を教えてください。

    Linux Centos4.7 Pakageのアップデート方法がわかりません。yumではみつからないといわれてしまいます。具体的にはgtk+-2.0を入れたいのですが。 簡単な質問かもしれませんがよろしくお願いします。ちなみに、make,installしても他のプログラムをコンパイルする際に、ライブラリバージョンが低いと言われてしまいます。

  • スタティックライブラリの使い方

    Linuxで使えるCのライブラリを落としてきたのですが、使ったことがないので戸惑っています。 パッケージは、makefile , .c , .h の3つで、makeするのはできました。で、ライブラリ.a が出力されまして、このファイルを使え!と説明書にはあるのですが、この先がよくわかりません。 とりあえず、出力されたライブラリを/usr/lib あたりに入れて、自作のプログラムで先ほどのライブラリのヘッダをインクロードするところまではできたのですが・・・。 コンパイルすると、/usr/bin/ld: cannot find -ライブラリ と出てしまいます。教えていただけますでしょうか。

  • QtでMakeがうまくいかない

    Qtの本を買ったので勉強しようと思い、サンプルを作ってみたのですがMakeがうまくいきません。 エラーメッセージを見る限りはリンカがおかしいみたいなのですが… 状況と環境を記載しますので問題点があればどなたかご教授お願いいたします。 なお、情報が足りなければ随時出していきますので何卒お願いいたします 【環境】 OS:Ubuntu7.04 ライブラリ:qt-x11-free3.2.1 コンパイラ:gcc(バージョンが沢山出てわかりませんが最新は4.1のよう) 【手順(インストール~Make)】 (1)tar.gzだったライブラリを/usr/localに展開 (2)環境設定のために「.profile」に以下を追加  QTDIR=/usr/local/qt-x11-free3.2.1  PATH=$QTDIR/bin:$PATH  MANPATH=$QTDIR/doc/man:$MANPATH  LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH  export QTDIR PATH MANPATH LD_LIBRARY_PATH  ※設定後LD_LIBRARY_PATHだけechoでも確認できませんでした (3)ライブラリのMakeのためにqt-x11-free3.2.1ディレクトリ内の「configure」を実行 (4)適当に空のディレクトリにサンプルを作る。 (5)コマンド「qmake -project」を実行 (6)コマンド「qmake」を実行 (7)(6)によって作成されたMakeFileを実行 【状況】 コンパイルでエラーとなり以下が出力されます。 /usr/bin/ld: cannot find -lqt collect2: ldはステータス1で終了しました。 make: ***[Qt]エラー1

  • Unix上C++でのdllとインポートライブラリの関係

    こんにちわ。 いつも教えてgooにお世話になっているorange_pieです。 UNIX上のC++で作成した自作ライブラリをdllにして配布したいのですが、 Unixでの基本的な考え方を教えてください。 (1)Unix上ではDLLの標準的な名称は”libxxxx.so”とするのが普通ですか?  ※この形式ならLD_LIBRARY_PATH環境変数が検索してくれる。。。 (2)通常、DLLにする場合、インポートライブラリ(.lib)と実際のライブラリ(.so)を作成して、使用する側はインポートライブラリのみをリンクするのでしょうか? (3)配布されたdllを使う側では、Link時にインポートライブラリをリンクして、関連インクルードファイルをインクルードするだけで使えるのでしょうか? (4)上記の(2)のように、インポートライブラリとライブラリの実態を作成する為のコンパイルオプションが見つかりません。(ldのmanを見たのですが、意味がわからないと言うか。。。。。) この質問は、自作ライブラリからlibxxx.soという形のオブジェクトファイルを作り、別プログラムからこのlibxxxをコンパイルオプション(-l)でリンクしてみたら正しく動作したのですが、これでは結局ライブラリの本体が一緒にリンクされている様子で、出来上がった実行形式のファイルサイズが静的ライブラリとしてリンクした時と同じ大きさになっていることに疑問を抱いてしまったものです。  この状態でも、ライブラリの方だけコンパイルしなおして実行すると ちゃんとライブラリの変更点は反映されるので問題は無いのですが、 これでもダイナミックリンク・ライブラリと呼べるのでしょうか?

  • Release用にもDebug用にも使えるライブラリの作り方

    皆さんこんにちは。 MFCでスタティックライブラリをつくっています。 ライブラリのコンパイルの際に、ReleaseかDebugの いずれかを指定しますが、それぞれのモードで つくったライブラリは、それぞれのモードの実行 ファイルにしかリンクできないのでしょうか? どちらのモードの実行ファイルにもリンク可能な ライブラリをつくることは可能でしょうか? もし可能な場合、どのような手順でつくれば よいのでしょうか? どうぞよろしくお願いいたします。

  • configure: error: Berkeley DB version mismatch

    たいへん困ってます。 超初心者でずっと調べているのですが、openLDAPがインストール出来ません。 利用しているOS:CentOS4.6 openLDAP 2.4.111 Berkeley DB 4.7.25 openssl opensslをインストールし、Berkeley DB 4.7.255をインストールしました。 openldapのコンパイル環境を設定しようと ./configure --enable-wrappers --enable-tls --enable-crypt をすると、 checking for Berkeley DB major version... 4 checking for Berkeley DB minor version... 7 checking for Berkeley DB link (-ldb-4)... yes checking for Berkeley DB version match... Berkeley DB version mismatch header: Berkeley DB 4.7.25: (May 15, 2008) library: Sleepycat Software: Berkeley DB 4.2.52: (July 14, 2007) no configure: error: Berkeley DB version mismatch ↑となり、インストール出来ません。 色々調べて、PATHの設定がよくないのかな?とおもったのですが、PATHの設定方法が解らず困っています。 export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.4.7/lib:/usr/local/lib しても何も変りません。 そもそも/usr/local/のなかにBerkeleyDB.4.7なんてディリレクトリが在りません。 BerkeleyDB.4.7のインストールがうまくいってないのでしょうか? BerkeleyDB.4.7のインストールの手順は下記でおこないました。 tar xzf db-4.7.25.tar.gz cd db-4.7.25 cd build_unix ../dist/configure --prefix=/usr/local make su(rootに変更) #make install 超初心者です。 どうか、CentOSの実行コマンドを含めて教えていただけると助かります。 他に情報が足りなければ、お応えしますので、どうかよろしくお願いいたします。

  • Linuxでintel mass kernel libraryを使いた

    Linuxでintel mass kernel libraryを使いたいのですが、パスが通っていない?ようで使えません。コンパイラーはintel compilerで、.bash_profileからLD_LIBRARY_PATHを指定してみたりしたのですが、icc -print-search-dirsで見るとやっぱりlibraryに入りません。 私は大学生で、研究室で共有の計算用パソコンにMKL自体はインストールしてあったのを使えるようにしようと設定しています。ただ研究室の先輩で使っていた人はもういないみたいです↓ 何か情報が足りなければご指摘お願いします。

  • Linuxの動的ライブラリをMacで使いたい

    64bit Linux用に提供されたライブラリ(*.a, *.so)をMac(Snow Leopard)で使いたいと思っています。Mac環境でコンパイルをしたところ、リンク時に以下のwarningが出てしまいました。 ld: warning: in xxx.so, file is not of required architecture Webで調査し、gccのオプションに-arch i386 -arch x86_64を付けてみましたが解決できませんでした。そもそも、Linux用のライブラリをMacで使うというのは無理なのでしょうか?ご回答どうぞよろしく御願いいたします。

  • 共有ライブラリへのパス指定の方法

    共有ライブラリへのパス指定の方法について教えて下さい。 環境は TurboLinux / C言語です lib_k.sl という共有ライブラリがあります。 【開発環境】  /hhn --- lib -(ここにlib_k.slがある)     |     -- src - ・・・(ここにプログラムのソースファイルがある) 【実行環境】  /ppc --- lib -(ここにlib_k.slを置く)     |     -- ld -(ここにプログラムのロードモジュールを置く) 開発プログラムのメイクファイルに、  /hhn/lib/lib_k.sl と書いてリンクさせています。すると、実行環境でも  /hhn/lib/lib_k.sl にリンクしようとしに行っているようです。 実行環境で /ppc/lib/lib_k.sl にリンクするには、どのようにすればよいのでしょうか? Cプログラミングはずっとやっていますが、共有ライブラリは使用したことが有りません。 ご教授お願いします。

専門家に質問してみよう