0

これは私が繰り返し遭遇する質問であり、通常はプラグインに関するものですが、最近、ビルドシステムの問題を解決しようとして遭遇しました。私の懸念は主に*nixベースのシステムですが、Windowsにも当てはまると思います。

問題は、ダイナミックリンクを実行するために必要な最小限の情報はどれくらいかということです。DebianのようなLinuxディストリビューションには単に「i686」があり、これで十分です。ただし、ここには暗黙の情報があると思います。共有オブジェクトを使用してコンパイルされている限り、共有オブジェクトの動的リンクを実行することはおそらくできません-march=i686ね。

では、共有オブジェクトを正常にロードできるようにするには、何を正しく一致させる必要がありますか?C ++の場合、名前のマングリングのためにコンパイラー(場合によってはバージョン)も一致する必要があることは知っていますが、cの場合はそうではないことを望んでいました。

どんな考えでもありがたいです。

編集
ニールの答えは、私がダイナミックリンクについて実際に話しているのではないことに気づきました。むしろ、質問は2つあります。

  1. 静的リンクに必要なもの、および
  2. ダイナミックリンクに必要なもの

私が最初に推測することに対して、私はより高い希望を持っています。

4

1 に答える 1

2

少なくとも、コードは同じプロセッサフ​​ァミリ用にコンパイルされている必要があり、ライブラリと関数の名前を知っている必要があります。その上、同じABIが必要です。人々の考えにかかわらず、C標準はABIを指定しておらず、2つのCコンパイラ(または同じコンパイラのバージョン)が標準に準拠し、同じプラットフォームで実行されるが、異なる可能性があることに注意してください。 ABI。

アーキテクチャの詳細を正確に指定することに関しては、私はそれを行ったことがないことを認めなければなりません。さまざまなLinuxバリアントでバイナリライブラリを配布することを計画していますか?

于 2010-02-08T12:22:13.713 に答える