我試圖用下列方式使用SCons創建靜態庫鏈接:如何使用SCons鏈接靜態庫?
//LIBSUFFIX and PREFIX are already set
env.Replace(LINKCOM = '$LINK $LINKOPTFILE $LINKMIXEDOPTIONS $LINKERR $LINKMAPFILE $SOURCES $LINKFILE $_LIBDIRFLAGS $_LIBFLAGS -o $TARGET')
env.Library('libraryname', ['file1.o','file2.o'])
env.Program(target = '', LIBS = 'libraryname', LIBPATH = 'path', source = Glob(*.c))
我的問題是:libraryname.a
:在LINKCOM沒有它的位置前添加庫。也是已經包含在庫中的文件傳遞給鏈接命令(如SCons的不承認我創建從中庫)
恩:我必須從以下來源創建一個程序: main.c s1.c s2.c s3.c
和 Library library_s.a
from s1.o
and s2.o
。
連接器的命令由SCons的傳遞:
linker.exe linkerflags s1.o s2.o s3.o library_s.a -o target.exe
如何連接在_LIBDIRFLAGS
每個目錄及其correspoding庫,以及如何使SCons的意識到,我創造一些源文件庫?
編輯:這是連接器的命令應該怎麼樣子:
'linker.exe' linkerflags s3.o pathtolibrary/library_s.a -o target.exe
備註:因爲library_s.a從s1.o創建和s2.o我希望SCons的傳遞只有S3的.o和圖書館
如果使用「env.Replace(...)」刪除該行,它會起作用嗎?換句話說,SCons的「智能鏈接方法」應該自動處理所有你想要的東西......爲什麼你必須用其他東西替換它? – dirkbaechle
這是因爲我正在使用另一個編譯器/鏈接器,這是我的工具實現的一部分 –
輸出看起來應該如何?您仍然很難看到您之後的內容,因爲您顯示的命令行與您在SConstruct中所做的定義之間沒有明顯的聯繫......您並未顯示環境的其他設置的外觀喜歡。最後,你使用的是哪一個鏈接器,這是一個商業鏈接嗎? – dirkbaechle