我想上一个项目,一个模块有国外来电联系到一个C LIB tdsodbc
使用ghci中/ stack repl
,但我不断收到ghci中给GHC恐慌调用
ghc: panic! (the 'impossible' happened)
(GHC version 7.10.3 for x86_64-unknown-linux):
Loading temp shared object failed: /tmp/ghc4628_0/libghc_71.so: undefined symbol: SQLPrepareW
(其中在那个C lib中定义了SQLPrepareW
)。建设与堆栈工作正常。即使在实际调用外部函数的情况下,即使在刚刚导入外部调用模块的其他模块上也会发生这种情况。它不会在加载时发生,但只要我尝试完全评估repl中的任何函数。
我该如何告诉ghci某些函数是在ghc之外的库中定义的?
我已经试过-l
选项(如stack exec ghci -- -ltdsodbc
),但随后的唯一不同的是,从相同的lib不同的功能是错误消息:
ghc: panic! (the 'impossible' happened)
(GHC version 7.10.3 for x86_64-unknown-linux):
Loading temp shared object failed: /tmp/ghc24107_0/libghc_25.so: undefined symbol: SQLDriverConnectW
注意,这显然检查的LIB使用-l
时,因为如果我拼错了它,它会说,它不能找到它:
$ stack exec ghci -- -L/usr/lib/x86_64-linux-gnu/odbc -ltdsodbctypo
Warning (added by new or init): Specified resolver could not satisfy all dependencies. Some external packages have been added as dependencies.
You can suppress this message by removing it from stack.yaml
GHCi, version 7.10.3: http://www.haskell.org/ghc/ :? for help
<command line>: user specified .o/.so/.DLL could not be loaded (libtdsodbctypo.so: cannot open shared object file: No such file or directory)
Whilst trying to load: (dynamic) tdsodbctypo
Additional directories searched: /usr/lib/x86_64-linux-gnu/odbc
这是
$ stack --version
Version 1.4.0, Git revision e714f1dd3fade19496d91bd6a017e435a96a6bcd (4640 commits) x86_64 hpack-0.17.0
我也试过stack ghci --ghci-options '-ltdsodbc -fobject-code'
,但它也与undefined symbol: SQLPrepareW
恐慌。
试试这个https://github.com/commercialhaskell/stack/issues/448 –
啊,看起来很有前途,我以前有一些模块失踪'other-modules',但是即使在添加并执行堆栈清理&&堆栈构建&&堆栈ghci后,它仍然会像以前一样发生混乱: – unhammer
什么'nm libtdsodbc.so | grep SQLDriverConnectW'显示? –