1

RHEL マシンで tcl バージョンを 8.4 から 8.5.12 に変更すると問題が発生します。当社の製品は、Tcldom、Tclxml などの TclDevKit コンポーネントを使用しています。また、Incr Tcl (Itcl) も使用しています。次のように、そのパッケージが必要なときに Itcl を見つけるために、Itcl に pkgIndex.tcl ファイルを作成しようとしています。

package ifneeded Itcl 3.4 [list load [file join $dir "libitcl-O.a"] Itcl ]

しかし、私が使用するとき

package require Itcl

レポートの取得:ファイル "/somepath/itcl/lib/libitcl-Oa" を読み込めませんでした: /somepath/lib/libitcl-Oa: 無効な ELF ヘッダー

拡張子が .a のファイルをロードできないようですが、以前のバージョンの tcl (8.4) でも同じことが行われ、正常に動作します。私はたくさんグーグルで検索し、たくさんのドキュメントを読みましたが、それ以上進んでも役に立ちません。

助けてください。

前もって感謝します

4

1 に答える 1

0

ライブラリには、静的ライブラリと共有ライブラリの 2 つの一般的な種類があります。Linux では、静的ライブラリには.aデフォルトで拡張子があり、共有ライブラリには拡張子.so(さらにオプションでバージョンを示すいくつかの数字) があります。Tcl のコマンドで動作するのは共有ライブラリのみloadであり、その場合でも (文書化されているように適切なFoobar_Init関数を使用して) そのように動作するように設計する必要があります。

スタブ エクスポート拡張機能 (かなりまれ) または Tcl と Tk 自体を扱う場合、リンクは 2 つの部分で行われます。通常は と呼ばれるスタブ ライブラリとsomethingstub.a、メインの共有ライブラリがあります。メインの共有ライブラリには、コードの実装が含まれています。スタブ ライブラリにあるのは ABI/API アダプタだけなので、コードを実装ライブラリの明示的なバージョンにバインドすることを避けることができます。スタブ対応の拡張機能をビルドし、スタブ ライブラリにリンクすることで、再コンパイルや再リンクの手順をまったく実行せずに、Tcl/Tk の将来のバージョンに拡張機能をロードできるようになります。(拡張機能を展開用にスターキット内に配置することもできます。これは、スタブ メカニズムによって隠されている共有ライブラリを管理するかなり珍しい方法を使用するためです。)

于 2013-08-08T08:56:43.777 に答える