2009-10-07 85 views
2

嗨,我正在用Scons創建環境。 對於Windows平臺(鏈接)鏈接程序可獲取安裝使用SCons我 份額庫路徑的前綴 - 磁盤名稱Scons在NFS LIBPATH中添加磁盤名稱前綴

我已經庫中NFS:

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

在scons的我:

env.Append(LIBPATH = [libs]) 

結果是鏈接器調用類似這樣的東西:

/LIBP ATH:D:\ share \ lib \ lib

回答

1

它看起來像追加功能正在改變您的輸入。你有沒有試過通過__set_item__界面操作'LIBPATH'?嘗試:

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

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

另外,如果你想離開蟒蛇\逃避地獄,你可以使用字符串前綴[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文件。

+0

嗨Ross,額外的':'產生: 「/ I:\ share \ lib \ lib」,當我添加額外的空間相反,我已經 「/我\共享\ lib \ lib」,這仍然是不正確的。我應該有 「/我\\共享\ lib \ lib」這一個額外的反斜槓是重要的,我不明白。無論我在「分享」之前放多少「\\\\\」(或r'')。 – bua 2009-10-09 07:02:22

+0

參見上面的編輯 – 2009-10-09 16:25:16

+0

這些值似乎是正確的,但是在將它們添加到env ['LIBPATH']後,磁盤名稱仍然被添加。 我只找到一個有效的解決方案: - net use share L: - 在winXP上 - smbmount .... - 在linux上 在調用scons的批處理中。 這同樣發生了一些其他的屬性,但我不記得現在,爲什麼。 無論如何感謝您的幫助羅斯。 – bua 2009-10-28 14:11:34

0

問題的根源在於SCons將LIBS數組中找到的庫添加到鏈接器命令行中 - 具有完整路徑。這會導致鏈接器將這個完整的路徑名保存到生成的可執行文件中,這是不幸的,特別是如果我們正在構建一些將在稍後安裝到系統目錄中的庫。我不確定我們是否可以指責SCons,因爲鏈接器需要找到用於鏈接的庫。

我只能找到以下兩種解決方案到現在:

  • 建庫和可執行相同的生成目錄,將生成的文件 之後(例如與安裝()生成器)。這導致 庫在系統目錄中針對已安裝的庫可執行
  • 環節結束了的只是名稱和使用的機制 配置正確的依賴

兩種方案似乎有點尷尬.. ..

PS:(編輯)雖然有一個非便攜式解決方案。您可以將特定選項傳遞給鏈接器。尤其是,在GNU/Linux系統上,您可以使用-h選項顯式設置DT_SONAME。當庫包含此顯式設置DT_SONAME字段時,其他庫或可執行文件中的任何引用將僅使用該名稱 - 在調用時將精確的解析度留給鏈接器。通常這正是我們想要的,當建立一個新的庫,以後安裝到系統