アカウント名:
パスワード:
とりあえず、現在最もよく用いられているelfの場合。
elfの場合、shared objectにはversion numberという概念はありません(確かa.outではld.soの動作に意味を持つversion numberが存在した)。その代りに、major version number(executable作成時とruntimeで一致していなければならない)をheaderに埋め込むことによってversion controlを実現しています。
major version numberは、dynamic sectionのSONAMEに保存されます。gnu binutilsの場合、objdump(1)で確認できます。
silver% objdump -x /usr/lib/libc.so.5 | head -n 20 (snip) Dynamic Sec
元仕事場のSolaris 7で調べてみました。mapfileの中にsymbolのversionが書けるようですね。
...しかし、gnu libtoolが対応するまでは存在に気づかない人が多いのでは?
gnu binutilsやlibtoolなど、objectを扱うものの場合「とっくに対応している」という論法は通用しません。というのは、各種Unixごとに採用しているbinutilsなどのversionが異なる(主にkernel buildの際、address spaceを正しく作る必要がある)ため、いまだに古いものを使わざるを得ない場合もあるのです。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
ライブラリの更新時にもメリット? (スコア:3, 参考になる)
普通は
鵜呑みにしてみる?
Re:ライブラリの更新時にもメリット? (スコア:1)
多くのソフトウェアで使われているライブラリに障害が見つかった場合、
稼働中のシステムでは全部 make し直すというのは
かなり厳しい作業でしょうから、そういった意味でも
dynamic link になるのはいいことですよね。
ただ、今度はライブラリの下位互換性の問題が生まれるのでしょうが……
.NET Framework では、共有アセンブリのバージョン管理に工夫をしているようで
サイドバイサイド実行 [microsoft.com]なんていうものもできるそうなのですが、
Unix の .so はどうなっているのでしょう。
よく、
/usr/local/lib/libVFlib2.so -> li
elf shared objectの場合 (スコア:3, 参考になる)
とりあえず、現在最もよく用いられているelfの場合。
elfの場合、shared objectにはversion numberという概念はありません(確かa.outではld.soの動作に意味を持つversion numberが存在した)。その代りに、major version number(executable作成時とruntimeで一致していなければならない)をheaderに埋め込むことによってversion controlを実現しています。
major version numberは、dynamic sectionのSONAMEに保存されます。gnu binutilsの場合、objdump(1)で確認できます。
silver% objdump -x /usr/lib/libc.so.5 | head -n 20
(snip)
Dynamic Sec
Re:elf shared objectの場合 (スコア:0)
実際 glibc が使ってます。元ネタは Solaris 。
振り向くとそこにはプロストではなくて Solaris がいるのが UNIX の世界。
Re:elf shared objectの場合 (スコア:1)
元仕事場のSolaris 7で調べてみました。mapfileの中にsymbolのversionが書けるようですね。
...しかし、gnu libtoolが対応するまでは存在に気づかない人が多いのでは?
Re:elf shared objectの場合 (スコア:0)
とっくに対応していますが何か?
Re:elf shared objectの場合 (スコア:1)
gnu binutilsやlibtoolなど、objectを扱うものの場合「とっくに対応している」という論法は通用しません。というのは、各種Unixごとに採用しているbinutilsなどのversionが異なる(主にkernel buildの際、address spaceを正しく作る必要がある)ため、いまだに古いものを使わざるを得ない場合もあるのです。