0

特定のオブジェクトのみを相互にリンクできるように、C でオブジェクト ファイルのリンクを実装する方法はありますか?

例えば。オブジェクト 1 とオブジェクト 2 をリンクしようとすると動作し、動作する実行可能ファイルが生成されますが、オブジェクト 1 とオブジェクト 3 をリンクしようとするとエラーが返されるか、結果の実行可能ファイルが正しく動作しません。

背景情報: 基本的に、プログラマー A とプログラマー B がそれぞれのオブジェクトをリンカー会社に送信する状況です。A と B は、リンカ会社がそれらのオブジェクトのみをリンクできるようにし、他のプログラマー (つまり、プログラマー C など) のオブジェクトとリンクしないようにしたいと考えています (違法であるため)。

Jörgen Sigvardssonの答えは役に立ちますが、もっと確実な方法があるかどうか疑問に思っています。例えば。gcc を使用して不正なオブジェクトをリンクしようとすると、Linker Company は必要なシンボルを判断し、それらを不正なオブジェクトに追加するだけで、簡単に制限を破ることができます。

4

3 に答える 3

1

はい、方法はあります。オブジェクト 1:

extern int object_1_symbol;
int object_2_symbol;

オブジェクト 2 では:

int object_1_symbol;
extern int object_2_symbol;

これにより、これらのオブジェクトを一緒にリンクする必要があり、オブジェクト 3 と一緒にリンクすることができなくなります。これは絶対確実ではありませんが、目的には役立つ可能性があります。

于 2011-10-23T16:37:26.440 に答える
0

foo1.oプログラムが と の両方をリンクするか、いずれもリンクしないことを確認したい場合はfoo2.o、単純にそれらを 1 つのオブジェクトに結合します。

ld -r -o foo-combined.o foo1.o foo2.o

そしてエンドユーザーにのみ与えるfoo-combined.o

何か他のことを達成したい場合は、質問をより明確に繰り返してください。

于 2011-10-23T16:29:43.007 に答える
0

いいえ、あなたが説明したことを行う方法はありません。

于 2011-10-23T16:27:16.440 に答える