解决“c-source”名称和 GHC RTS 名称之间的冲突

Cac*_*tus 6 linker haskell ffi ghc

我有一些使用 FFI 从 Haskell 调用的 C 源代码ccall。为了使构建过程尽可能简单,我想使用 Cabal 编译 C 文件,因此我已将源代码添加到c-sources我的.cabal文件部分。

问题是我导入 Haskell 的 C 函数是根据另一个名为 的 C 函数(我没有直接从 Haskell 使用)来实现的allocate,这会导致链接时发生冲突:

ratkai> [16 of 16] Linking .stack-work/dist/x86_64-linux/Cabal-3.8.1.0/build/ratkai-tvc/ratkai-tvc [Objects changed]
ratkai> /usr/bin/ld.gold: error: /home/cactus/.ghcup/ghc/9.4.5/lib/ghc-9.4.5/lib/../lib/x86_64-linux-ghc-9.4.5/rts-1.0.2/libHSrts-1.0.2.a(Storage.o): multiple definition of 'allocate'
ratkai> /usr/bin/ld.gold: .stack-work/dist/x86_64-linux/Cabal-3.8.1.0/build/ratkai-tvc/ratkai-tvc-tmp/import/ZX0/src/memory.o: previous definition here
ratkai> collect2: error: ld returned 1 exit status
ratkai> ghc-9.4.5: `gcc' failed in phase `Linker'. (Exit code: 1)
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,而无需修补导入的 C 库来重命名其allocate函数