看起來像你想部分鏈接(--relocatable
標誌在ld
手冊頁)。正如我從源頭上看到的,cabal
僅使用部分鏈接庫,編譯爲ghci
。從Distribution.Simple.GHC(buildLib
功能):
whenVanillaLib False $ do
(arProg, _) <- requireProgram verbosity arProgram (withPrograms lbi)
Ar.createArLibArchive verbosity arProg
vanillaLibFilePath staticObjectFiles
whenProfLib $ do
(arProg, _) <- requireProgram verbosity arProgram (withPrograms lbi)
Ar.createArLibArchive verbosity arProg
profileLibFilePath profObjectFiles
whenGHCiLib $ do
(ldProg, _) <- requireProgram verbosity ldProgram (withPrograms lbi)
Ld.combineObjectFiles verbosity ldProg
ghciLibFilePath ghciObjFiles
whenSharedLib False $
runGhcProg ghcSharedLinkArgs
你可以看到,香草和分析庫,cabal
只是調用ar
實用程序(見createArLibArchive)。對於ghci
它調用ld
與-r
標誌(這是--relocatable
的快捷方式)(請參閱combineObjectFiles)。
因此,cabal
實際上並沒有爲香草庫做任何鏈接,它只是結合了目標文件。其實cabal
不知道,最終的申請是否會使用您的extra-lib
中的任何符號,所以行爲似乎是合理的。
有沒有辦法強制它使用'ld -r'而不是'ar'作爲香草庫?我試過添加'ld-options:-r',但它似乎沒有做任何事情(大概是因爲'ld'沒有被使用?) –
@TomSavage不,我認爲這是不可能的。但我不是cabal的專家。 – Yuras