2

こんにちは、Scons で環境を構築しています。Windows プラットフォームの場合 (リンク) リンカは共有ライブラリ パスの Scons 設定をプレフィックス - ディスク名で取得します

私はNFSにライブラリを持っています:

libs='\\\\share\\lib\\lib'

私が持っているsconsでは:

env.Append(LIBPATH = [libs]) 

その結果、リンカーは次のようなものを呼び出します。

/LIBPATH:D:\share\lib\lib

4

2 に答える 2

1

Append関数が入力を変更しているようです。__set_item__インターフェースを介して「LIBPATH」を操作してみましたか?試す:

env['LIBPATH'] += ':'+libs

また

env['LIBPATH'] += ':\\\\share\\lib\\lib'

また、python \ escape-hellから抜け出したい場合は、「raw」を表す文字列プレフィックスrを使用できます。これにより、すべての\が無秩序に渡されます。

env['LIBPATH'] += r':\\share\lib\lib'

編集:作者のコメントに応えて、これをさらにデバッグするために:

append_lib_path = r':\\share\lib\lib'
print 'DEBUG: append_lib_path is', append_lib_path

print "DEBUG: before appending to env['LIBPATH'], env['LIBPATH'] is ",env['LIBPATH']

env['LIBPATH'] += append_lib_path

print "DEBUG: after appending to env['LIBPATH'], env['LIBPATH'] is ",env['LIBPATH']

最後の印刷でenv['LIBPATH']に正しい値が表示されている場合は、sconsの他の何かが入力を操作しています。libパスに追加する文字列が正しくない場合は、Pythonインタープリターで文字列を操作してみてください。<Windowsの起動>-><実行...>を実行します。次に、「python」と入力します。これにより、インタラクティブなPythonターミナルが提供され、文字列操作を試すことができます。その一連のコマンドを実行しても機能しない場合は、どこかでpythonインストールを見つけて、python.exeファイルをダブルクリックしてみてください。

于 2009-10-08T21:25:44.277 に答える
0

ここでの問題の根本は、SCons が LIBS 配列で見つかったライブラリをリンカー コマンドラインに追加することです (フル パスを使用)。これにより、リンカーはこのフル パス名を生成された実行可能ファイルに保存します。これは、後でシステム ディレクトリにインストールされるいくつかのライブラリを構築している場合は特に残念です。リンカーはそれに対してリンクするためのライブラリを見つける必要があるため、SCons を非難できるかどうかはわかりません。

これまでのところ、次の2つのソリューションしか見つかりませんでした。

  • ライブラリと実行可能ファイルを同じビルド ディレクトリにビルドし、生成されたファイルを後で移動します (たとえば、Install() ビルダーを使用)。これにより、ライブラリの名前だけが実行可能ファイルになります
  • システムディレクトリに既にインストールされているライブラリにリンクし、適切な依存関係を構成するためのメカニズムを使用します

どちらのソリューションもやや厄介に思えます....

PS: (編集)ただし、移植性のないソリューションがあります。特定のオプションをリンカーに渡すことができます。特に、GNU/Linux システムでは、-h オプションを使用して DT_SONAME を明示的に設定できます。ライブラリにこの明示的に設定された DT_SONAME フィールドが含まれている場合、他のライブラリまたは実行可能ファイルの参照はその名前を使用するだけであり、呼び出し時にリンカーに正確な解決を残します。後でシステムにインストールする新しいライブラリを構築する場合、通常、これはまさに私たちが望むものです。

于 2011-01-28T18:04:07.057 に答える