看起来像你想部分链接(--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