2016-12-22 2 views
0

私は最近this answerを読んでいて、ユーザーが静的ライブラリを正しい順序でリンクする必要があるように見えることに気付いていません。与えられた静的ライブラリのオブジェクトファイルの抽出を人為的に誘導することは可能ですか?

マイライブラリのオブジェクトファイルが常に含まれるように、自分のライブラリーをコンパイルするとき、私はgccに渡すことができますいくつかのフラグまたは#pragmaはありますか?

具体的には、静的ライブラリを別のライブラリより前にリンクし、明示的に指定されたオブジェクトファイルと同じ方法で、未解決のシンボルが巻き込まれないようにすることができますリンカーライン上にあります。

特に、私はライブラリのユーザーが何か特別な処理をする必要がないソリューションを探していて、他のライブラリをリンクする方法を-lMylibraryに渡すだけでよい。

+0

半分のソリューションを一緒にハッキングするのではなく、本当にpkg-configのようなものを調べるべきです。 – rubenvb

+0

@rubenvb提案していただきありがとうございます。私は実際には既に私の図書館とは違った方向に動いていますが、私はまだ答えが非常に分かりやすいことを知っています。 – merlin2011

答えて

1

いくつかのフラグがあるのか​​#pragma私は、GCCに渡すことができます

が、私はユーザーが依存別のライブラリの前に私の静的ライブラリをリンクすることができた場合になりたい号リンカ行に明示的に指定されているオブジェクトファイルと同じ方法で、未解決のシンボルが表示されないようにします。

"ライブラリ"を1つのオブジェクトファイルとして配送してください。

ar ru libMyLibrary.a ${OBJS} 

使用:言い換えれば、代わりのでは特に

ld -r -o libMyLibrary.a ${OBJS} 

、私は図書館の利用者が特別な何もする必要はありません解決策を探して、単に必要がありますしています-lMylibraryに他のライブラリをリンクする方法を渡します。

オブジェクトファイルには、libMyLibrary.aという名前を付けることができます。私はリンカーが通常の規則を使ってそれを検索すると信じていますが、それが見つかると、これはオブジェクトファイルであることがわかり、 "誤った名前"にもかかわらずそのように扱います。これは少なくともLinuxやその他のELFプラットフォームで動作するはずです。 Windows上で動作するかどうかはわかりません。

+0

私はこれをLinux上で動作させるために必要としました。これはすばらしい答えです!私は自分でそれを発見したことはないだろうし、私は実際にあなたがこれについて学んだ方法が興味がある。 – merlin2011

関連する問題