問題タブ [binary-compatibility]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
com - VB6 バイナリ互換性 - 新しいイベントの追加
VB6 ActiveX exe プロジェクトでは、新しいイベントが追加された場合に、イベント ディスパッチ インターフェイスの GUID を保持する方法はありますか?
既存のイベントを変更すると、明らかに互換性が失われます。新しいものを追加しても、VB6 IDE は警告を発しません。ただし、新しいメソッドを追加しても警告は表示されませんが、少なくとも既存のメソッドは GUID を保持するため、これは特に驚くことではありません。
イベントでは、新しいイベントが後で追加された場合、既存のイベントの下位互換性を維持する方法がないようです。
これは、COM 経由で統合する VB6 アプリケーションの問題ではないようです。VB ランタイムは、GUID を前もって知る必要なく、レジストリを介してイベントを取得するために何か賢いことをしていると思います。
他のアプリが .Net (具体的には C#) であり、イベント シンクを実装するために手動でインターフェイスを宣言する必要がある場合、VB6アプリが拡張されました。VB6 アプリで新しく実装されたイベントについては、私は知らないかもしれませんし、気にすることもありません。.Net ソース コードを変更する必要なく、既存のイベントを引き続き使用できるようにしたいだけです。
これを可能にするために見逃しているVB6のトリックはありますか?
c - Linuxディストリビューション間のバイナリ互換性
これが明らかな質問である場合は申し訳ありませんが、Web上で驚くほど少ない参照を見つけました...
私はビジネスパートナーの1人によってCで記述され、Fedora 11上に構築された.soバイナリファイルとして提供されたAPIを使用しています。私たちは、Fedora11開発マシンでAPIを問題なくテストしています。ただし、お客様のターゲットプラットフォーム(たまたまSuSE Enterprise 10.2)でAPIにリンクしようとすると、「ファイル形式が認識されません」というエラーが発生します。
objdumpやnmなどのbinutilsパッケージの一部でもあるコマンドでは、同じファイル形式エラーが発生します。「file」コマンドは私に示します:
「ldd」コマンドは次のことを示しています。
これは、2つのプラットフォーム上のCライブラリ間の非互換性によるものだと思います。問題は、コードがSuSE10.2で利用可能なものよりも新しいバージョンのglibcなどに対してコンパイルされていることです。この質問は、パートナーのFedora11プラットフォームでSuSE10.2でも実行できるようにコードをコンパイルする方法があるという偶然の機会に投稿しています。
c++ - バイナリ互換の拡張性のためにC++APIを設計する方法
dll/共有オブジェクトで配布されるC++ライブラリのAPIを設計しています。ライブラリには、仮想関数を備えたポリモーリッククラスが含まれています。これらの仮想関数をDLLAPIで公開すると、以前のバージョンのライブラリ用に構築されたアプリケーションとのバイナリ互換性を損なうことなく、同じクラスをより多くの仮想関数で拡張できる可能性がなくなるのではないかと心配しています。
1つのオプションは、PImplイディオムを使用して仮想関数を持つすべてのクラスを非表示にすることですが、これにも制限があるようです。このように、アプリケーションはライブラリのクラスをサブクラス化し、仮想メソッドをオーバーライドする可能性を失います。
後方バイナリ互換性を維持しながら、新しいバージョンのdllで(抽象ではない)仮想メソッドを使用してAPIを拡張する可能性を失うことなく、アプリケーションでサブクラス化できるAPIクラスをどのように設計しますか?
更新:ライブラリのターゲットプラットフォームは、windows/msvcおよびlinux/gccです。
java - インターフェイスを削除すると、オブジェクトのメソッドを呼び出すコードが壊れますか?
Javaでリファクタリングを行う必要があり、ある程度のバイナリ互換性を維持する必要があります。この場合、もうどこにも使用されておらず、かなり大きな(そして非推奨の)外部依存関係を必要とするいくつかのレガシーインターフェースを削除したいと思います。
C
インターフェイスを実装するクラスがI
あり、のインスタンスでメソッド(インターフェイスで宣言されている)を呼び出すコードがありますC
。呼び出し元のコードはC
、インターフェイスだけでなく、を使用していることを認識しています。
クラス定義からインターフェイスを削除しても(ただし、すべてのメソッドは保持します)、呼び出し元のコード(インターフェイスをまったく参照していません)は引き続き機能しますか(再コンパイルなし)?
c++ - C ++のグローバル配列はバイナリ互換性を破ることができますか?
共有ライブラリに次の行が含まれているとします。
1)アプリケーションはこのライブラリにリンクして記号「arr」を使用できますか?
2)新しい要素が定義に追加された場合、バイナリ互換性は失われますか?
3)文字列リテラルの1つが変更された場合はどうですか?
4)なぜ(そうではない)?
乾杯、ルーク
c++ - バイナリ互換性を自動的にテストする方法は?
コードを比較することによって、コンパイルする前にそれを行うことはできますか? すでにこれを行っているツールはありますか?
java - java.lang.IncompatibleClassChangeErrorの原因は何ですか?
JavaライブラリをJARとしてパッケージ化していますが、java.lang.IncompatibleClassChangeError
そこからメソッドを呼び出そうとすると、多くのsがスローされます。これらのエラーはランダムに表示されるようです。このエラーの原因はどのような問題ですか?
linux - Linuxディストリビューションのバイナリ互換性
Linuxディストリビューションでバイナリを作成し、同じアーキテクチャの別のディストリビューションで実行する方法はありますか?または、別のディストリビューションでコンパイルしてビルドする必要がありますか?
バイナリファイル用のRedhat、Debianベースのディストリビューション間に互換性はありますか?(fedoraでUbuntuバイナリファイルを使用したい!)
c++ - アプリケーションバイナリインターフェイスがプログラミングにとって重要なのはなぜですか
ABIがユーザースペースアプリケーションを開発する上で重要なコンテキストである理由がわかりません。オペレーティングシステムに対する一連のシステムコールはABIと見なされますか?しかし、もしそうなら、システムコールに関するすべての複雑さは標準ライブラリ内にカプセル化されていませんか?
では、システムコールはバイナリに埋め込まれるため、 ABIの互換性は、静的にリンクされたアプリケーションを異なるプラットフォームで実行する場合にのみ関係しますか?
java - JAR で欠落しているメソッド (バイナリ互換性) を静的に識別する方法
2 つの JAR 間のバイナリ互換性を確認したい。
この回答の提案に従って、 jboss tattletaleを使用しましたが、見つからないクラスしか見つかりません。
不足しているメソッドがあるかどうかを確認するにはどうすればよいですか? それはまったく可能ですか?
例えば
"Depends - on" クラスFoo は Bar に依存します (他の多くの中産階級の労働者と同様)
「コンパイル時」クラス
ここで、古いBar jar がコンパイルされたタイム バーを誤って置き換えていると想像してください。
「ランタイム」クラス
不足しているメソッドを実行して取得せずに特定する方法はありNoSuchMethodError
ますか?
免責事項:これは、私自身の関連する質問の大幅な言い換えであり、削除できません。言い換えると、現在の 2 つの回答がトピックとはまったく関係のないものになるため、新しい質問をすることにしました。