我想上一個項目,一個模塊有國外來電聯繫到一個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'顯示? –