haskell - 制作windows dll库 - segfault

时间:2015-05-31 08:42:09

标签: windows haskell dll segmentation-fault mingw32

目前,我尝试编译我的haskell库,它以前是在arch linux上编译的。共享库),到windows dll库。我已经读过,该cabal不支持将haskell dll库打包开箱。根据{{​​3}},我已经将这样的库编译成dll(编译工作)。

ghc -shared -o libLogic.dll dist/build/HSlogic_KA1QeY80keFKgyu69OtwOE.o \ 
/c/ghc/ghc-7.10.1/lib/conta_47ajk3tbda43DFWyeF3oHQ/HScontainers-0.5.6.2-47ajk3tbda43DFWyeF3oHQ.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/Missi_1lZqat04J1yLHrfGdhK9Qx/libHSMissingH-1.3.0.1-A2UVxmrfU \
xWGZUHs3Vx4et.a .cabal-sandbox/i386-windows-ghc-7.10.1/text_8rMotiVS8ISBkxP7UzusGU/HStext-1.2.1.1-1L7lZlUz0bO8ROU5DNNfWq.o \
.cabal-sandb ox/i386-windows-ghc-7.10.1/regex_1WudNAZWYEMJ7hjTqevDzK/HSregex-base-0.93.2-CsRFAGo3Jfi7vN1y74K9DT.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/regex_4EmnRBpiUiN81uA3rzCqhM/HSregex-compat-0.95.1-DsaThvjcDpRGceYPQ2iyOg.o \
.cabal-sandbox/i386-windows-ghc-7.10.1/regex_FcyoJ8fpGysAR4JUIv3Onx/HSregex-posix-0.95.2-HrKRtQubtek4GEuR7lgLlg.o /c/ghc/ghc-7.10.1/lib/bytes_6vj5EoliHgNHISHCVCb069/HSbytestring-0.10.6.0-6vj5EoliHgNHISHCVCb069.o \
/c/ghc/ghc-7.10.1/lib/deeps_FpR4obOZALU1lutWnrBldi/HSdeepseq-1.4.1.1-FpR4obOZALU1lutWnrBldi.o \
/c/ghc/ghc-7.10.1/ lib/binar_EKE3c9Lmxb3DQpU0fPtru6/HSbinary-0.7.3.0-EKE3c9Lmxb3DQpU0fPtru6.o  \
/c/ghc/ghc-7.10.1/lib/array_FaHmcBFfuRM8kmZLEY8D5S/HSarray-0.5.1.0-FaHmcBFfuRM8kmZLEY8D5S.o  \
.cabal-sandbox/i386-windows-ghc-7.10.1/split_EzXNp9Mcx6zDnUvRChe0Sw/HSsplit-0.2.2-EcQml2WFBePDKSCjwazauo.o

这个dll库后来用于链接程序(qt项目)

win32:LIBS += -L../lcng-gui -lLogic ../lcng-gui/libLogic.dll.a

qt编译也成功了,但是当我尝试运行程序时 - 它在strlen / _mingw_pformat中的段错误。

我做错了什么以及如何才能成功创建haskell dll库,可以在任何与之链接的程序中使用?

库        - 包含Main模块的.hs或.lhs文件。       GHC的选项:         -O3         -fwarn未使用的,进口       扩展:CPP

  -- Modules included in this executable, other than Main.
  -- other-modules:

  -- LANGUAGE extensions used by modules in this package.
  -- other-extensions:

  -- Other library packages from which modules are imported.
  build-depends:       base >=4.8 && <4.9, containers >=0.5 && <0.6,HUnit==1.2.*,split,text,MissingH,parsec >= 3

  -- Directories containing source files.
  hs-source-dirs:      src
  c-sources: src/hsbracket.c
  extra-libraries: HSrts-ghc7.10.1

  -- Base language which the package is written in.
  default-language:    Haskell2010
--  extra-libraries:     libHSrts-ghc7.10.1
  exposed-modules: Bindings,Utils.Expressions,Parser.Expressions,Parser.Tokenizers,
                   Types.Simple,Types.LExpressions,Parser.Operations,
                   Provers.Prover,Utils.Commands,Parser.Simplifiers,
                   Converters.Cnf,Converters.Lcn,Converters.Operators,
                   Utils.Types.LExpressions,Utils.History,Parser.State,
                   Solvers.Cnf,Graphs.Lcn,Utils.Sat,Types.Chess,Graphs.Formula,
                   Graphs.Search,Types.Graphs

和hsbracket是根据ghc文档定义的:

#include <HsFFI.h>

static void my_enter(void) __attribute__((constructor));
static void my_enter(void)
{
  static char *argv[] = { "libLogic.dll", 0 }, **argv_ = argv;
  static int argc = 1;
  hs_init(&argc, &argv_);
}

static void my_exit(void) __attribute__((destructor));
static void my_exit(void)
{
  hs_exit();
}

0 个答案:

没有答案