13

私のSConscriptには、次の行があります。

Program("xtest", Split("main.cpp"), LIBS="mylib fltk Xft Xinerama Xext X11 m")

他のライブラリと動的にリンクしながら、sconsにmylib.soの代わりにmylib.aを使用させるにはどうすればよいですか?

編集:プラットフォーム固有のハックをできるだけ少なくすることを検討しています。

4

2 に答える 2

14

ファイルノードでラップされた完全なファイルパスを渡すと、静的リンクが強制されます。例えば:

lib = File('/usr/lib/libfoo.a')
Program('bar', 'main.c', LIBS = [lib])

次のリンカーコマンドラインを生成します

g++ -o bar main.o /usr/lib/libfoo.a

「-l」フラグがこのLIBSエントリのリンカに渡されないことに注意してください。これにより、静的リンクが効果的に強制されます。別の方法は、LINKFLAGSを変更して、ライブラリ依存関係スキャナーをバイパスしているという警告とともに、必要なものを取得することです。ライブラリのステータスは、再構築のためにチェックされません。

于 2010-06-08T09:07:09.957 に答える
5

このプラットフォームを独立させるには、使用するライブラリにenv['SHLIBSUFFIX']を追加します。env ['SHLIBSUFFIX']は、共有ライブラリのこの環境サフィックスを提供します。

['SHLIBPREFIX']、['LIBPREFIX']、['LIBSUFFIX']、['PROGSUFFIX']もあり、これらはすべてこのような状況に役立ちます。

編集:

私は明らかに自分自身を理解していないので、明確にします。これらのルックアップの戻り値は、プラットフォームが使用するプリ/サフィックスへの文字列です。このようにして、各プラットフォームで必要なファイルを参照できます。純粋な文字列として使用することはできないことに注意してください。BennyGが提案するように、ファイルノードとして埋め込む必要があります。ファイルノードは文字列よりもはるかに用途が広いため、ノードでの作業はとにかく最良の解決策です。

お役に立てれば。

于 2010-06-08T06:58:22.713 に答える