Haskell LLVM 绑定链接器错误

发布于 2024-11-16 16:26:55 字数 1644 浏览 1 评论 0原文

更新:

我现在在 LLVM 2.9 上,绑定 llvm-0.9.1.2 在 ghc 7.0.4 上运行,我只遇到以下错误之一:

/home/jfmiller28/.cabal/lib/llvm-0.9.1.2/ghc-7.0.4/libHSllvm-0.9.1.2.a(Scalar.o): In function `sm03_info':
(.text+0x24d): undefined reference to `LLVMAddLoopIndexSplitPass'
collect2: ld returned 1 exit status

我收到 haskell LLVM 绑定的以下链接器错误:

Linking llvm ...
/home/jfmiller28/.cabal/lib/llvm-0.9.0.1/ghc-6.12.3/libHSllvm-0.9.0.1.a(Core.o): In function `scZD_info':
(.text+0xf589): undefined reference to `LLVMBuildFNeg'
/home/jfmiller28/.cabal/lib/llvm-0.9.0.1/ghc-6.12.3/libHSllvm-0.9.0.1.a(Core.o): In function `sdRn_info':
(.text+0x114c5): undefined reference to `LLVMAddDestination'
/home/jfmiller28/.cabal/lib/llvm-0.9.0.1/ghc-6.12.3/libHSllvm-0.9.0.1.a(Core.o): In function `sdSb_info':
(.text+0x11545): undefined reference to `LLVMAddGlobalInAddressSpace'
...
collect2: ld returned 1 exit status

对于 ghc --make hello.hs

module Main where

import Data.Word

import LLVM.Core
import LLVM.ExecutionEngine

bldGreet :: CodeGenModule (Function (IO ()))
bldGreet = withStringNul "Hello, JIT!" (\greetz -> do
    puts <- newNamedFunction ExternalLinkage "puts" :: TFunction (Ptr Word8 -> IO Word32)
    func <- createFunction ExternalLinkage $ do
      tmp <- getElementPtr0 greetz (0::Word32, ())
      _ <- call puts tmp -- Throw away return value.
      ret ()
    return func)

main :: IO ()
main = do
    initializeNativeTarget
    greet <- simpleFunction bldGreet
    -- greet

    return ()

LLVM 使用 apt-get 安装到 /usr/lib/llvm。

update:

I'm now on LLVM 2.9 with binding llvm-0.9.1.2 running on ghc 7.0.4 and I'm down to just one of these errors:

/home/jfmiller28/.cabal/lib/llvm-0.9.1.2/ghc-7.0.4/libHSllvm-0.9.1.2.a(Scalar.o): In function `sm03_info':
(.text+0x24d): undefined reference to `LLVMAddLoopIndexSplitPass'
collect2: ld returned 1 exit status

I am getting the following linker error for the haskell LLVM bindings:

Linking llvm ...
/home/jfmiller28/.cabal/lib/llvm-0.9.0.1/ghc-6.12.3/libHSllvm-0.9.0.1.a(Core.o): In function `scZD_info':
(.text+0xf589): undefined reference to `LLVMBuildFNeg'
/home/jfmiller28/.cabal/lib/llvm-0.9.0.1/ghc-6.12.3/libHSllvm-0.9.0.1.a(Core.o): In function `sdRn_info':
(.text+0x114c5): undefined reference to `LLVMAddDestination'
/home/jfmiller28/.cabal/lib/llvm-0.9.0.1/ghc-6.12.3/libHSllvm-0.9.0.1.a(Core.o): In function `sdSb_info':
(.text+0x11545): undefined reference to `LLVMAddGlobalInAddressSpace'
...
collect2: ld returned 1 exit status

For ghc --make hello.hs:

module Main where

import Data.Word

import LLVM.Core
import LLVM.ExecutionEngine

bldGreet :: CodeGenModule (Function (IO ()))
bldGreet = withStringNul "Hello, JIT!" (\greetz -> do
    puts <- newNamedFunction ExternalLinkage "puts" :: TFunction (Ptr Word8 -> IO Word32)
    func <- createFunction ExternalLinkage $ do
      tmp <- getElementPtr0 greetz (0::Word32, ())
      _ <- call puts tmp -- Throw away return value.
      ret ()
    return func)

main :: IO ()
main = do
    initializeNativeTarget
    greet <- simpleFunction bldGreet
    -- greet

    return ()

LLVM was installed with apt-get to /usr/lib/llvm.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幽蝶幻影 2024-11-23 16:26:55

最初问题的答案是我的 LLVM 版本太旧了。在撰写本文时,您需要 LLVM 2.8 或更高版本。

下一个问题与 llvm 绑定中过时的行有关。这次的解决方案是从 git 存储库编译 llvm 绑定。如果我错了,请纠正我,但我需要 cabal install llvm 下拉的公共 0.9.1.2 版本中的更新版本。

请参阅 https://github.com/bos/llvm/issues/2https://github.com/bos/llvm/pull/3

The answer to the original problem was that I have a version of LLVM that was too old. The the time of this writing you need LLVM 2.8 or newer.

The next problem had to do with an outdated line in the llvm bindings. The solution this time was to compile the llvm bindings from the git repository. Correct me if I am wrong, but I needed something newer the the public 0.9.1.2 release that cabal install llvm pulled down.

see https://github.com/bos/llvm/issues/2 and https://github.com/bos/llvm/pull/3

囚你心 2024-11-23 16:26:55

也许这个补丁可以让它与 LLVM 2.9 一起运行,并绑定 llvm-0.9.1.2 在 ghc 7.0.4 上运行

diff -rupN llvm-0.9.1.2/LLVM/FFI/Transforms/Scalar.hsc llvm-0.9.1.2-modified/LLVM/FFI/Transforms/Scalar.hsc
--- llvm-0.9.1.2/LLVM/FFI/Transforms/Scalar.hsc 2011-05-20 02:20:56.000000000 +0800
+++ llvm-0.9.1.2-modified/LLVM/FFI/Transforms/Scalar.hsc    2011-06-20 20:59:27.455828891 +0800
@@ -30,8 +30,6 @@ foreign import ccall unsafe "LLVMAddLICM
     :: PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMAddLoopDeletionPass" addLoopDeletionPass
     :: PassManagerRef -> IO ()
-foreign import ccall unsafe "LLVMAddLoopIndexSplitPass" addLoopIndexSplitPass
-    :: PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMAddLoopRotatePass" addLoopRotatePass
     :: PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMAddLoopUnrollPass" addLoopUnrollPass
diff -rupN llvm-0.9.1.2/llvm.cabal llvm-0.9.1.2-modified/llvm.cabal
--- llvm-0.9.1.2/llvm.cabal 2011-05-20 02:20:56.000000000 +0800
+++ llvm-0.9.1.2-modified/llvm.cabal    2011-06-20 21:03:29.846828930 +0800
@@ -125,7 +125,6 @@ library
       LLVM.Target.MSP430
       LLVM.Target.Mips
       LLVM.Target.Native
-      LLVM.Target.PIC16
       LLVM.Target.PowerPC
       LLVM.Target.Sparc
       LLVM.Target.SystemZ

maybe this patch can make it run with LLVM 2.9 with binding llvm-0.9.1.2 running on ghc 7.0.4

diff -rupN llvm-0.9.1.2/LLVM/FFI/Transforms/Scalar.hsc llvm-0.9.1.2-modified/LLVM/FFI/Transforms/Scalar.hsc
--- llvm-0.9.1.2/LLVM/FFI/Transforms/Scalar.hsc 2011-05-20 02:20:56.000000000 +0800
+++ llvm-0.9.1.2-modified/LLVM/FFI/Transforms/Scalar.hsc    2011-06-20 20:59:27.455828891 +0800
@@ -30,8 +30,6 @@ foreign import ccall unsafe "LLVMAddLICM
     :: PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMAddLoopDeletionPass" addLoopDeletionPass
     :: PassManagerRef -> IO ()
-foreign import ccall unsafe "LLVMAddLoopIndexSplitPass" addLoopIndexSplitPass
-    :: PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMAddLoopRotatePass" addLoopRotatePass
     :: PassManagerRef -> IO ()
 foreign import ccall unsafe "LLVMAddLoopUnrollPass" addLoopUnrollPass
diff -rupN llvm-0.9.1.2/llvm.cabal llvm-0.9.1.2-modified/llvm.cabal
--- llvm-0.9.1.2/llvm.cabal 2011-05-20 02:20:56.000000000 +0800
+++ llvm-0.9.1.2-modified/llvm.cabal    2011-06-20 21:03:29.846828930 +0800
@@ -125,7 +125,6 @@ library
       LLVM.Target.MSP430
       LLVM.Target.Mips
       LLVM.Target.Native
-      LLVM.Target.PIC16
       LLVM.Target.PowerPC
       LLVM.Target.Sparc
       LLVM.Target.SystemZ
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文