繁体   English   中英

将Cabalized Haskell软件包链接到C程序(未定义的引用链接器错误)

[英]Linking cabalized Haskell package to C program (undefined reference linker error)

我的链接命令是:

gcc -O2 -m32 -o ParseInt.exe ParseInt.o hsbracket.o \
    -L../../dist/ia32/build -lffi -lHSarray-0.5.0.0-ghc7.8.3 \
    -lHSbin-package-db-0.0.0.0-ghc7.8.3 -lHSbinary-0.7.1.0-ghc7.8.3 \
    -lHSbytestring-0.10.4.0-ghc7.8.3 -lHSCabal-1.18.1.3-ghc7.8.3 \
    -lHScontainers-0.5.5.1-ghc7.8.3 -lHSdeepseq-1.3.0.2-ghc7.8.3 \
    -lHSdirectory-1.2.1.0-ghc7.8.3 -lHSfilepath-1.3.0.2-ghc7.8.3 \
    -lHSghc-7.8.3-ghc7.8.3 -lHSghc-prim-0.3.1.0-ghc7.8.3 \
    -lHShaskeline-0.7.1.2-ghc7.8.3 -lHShaskell2010-1.1.2.0-ghc7.8.3 \
    -lHShaskell98-2.0.0.3-ghc7.8.3 -lHShoopl-3.10.0.1-ghc7.8.3 \
    -lHShpc-0.6.0.1-ghc7.8.3 -lHSinteger-gmp-0.5.1.0-ghc7.8.3 \
    -lHSold-locale-1.0.0.6-ghc7.8.3 -lHSold-time-1.1.0.2-ghc7.8.3 \
    -lHSpads-haskell-1.1-ghc7.8.3 -lHSpretty-1.1.1.1-ghc7.8.3 \
    -lHSprocess-1.2.0.0-ghc7.8.3 -lHSrts-ghc7.8.3 \
    -lHSrts_debug-ghc7.8.3 -lHSrts_l-ghc7.8.3 -lHSrts_thr-ghc7.8.3 \
    -lHSrts_thr_debug-ghc7.8.3 -lHSrts_thr_l-ghc7.8.3 \
    -lHStemplate-haskell-2.9.0.0-ghc7.8.3 -lHSterminfo-0.4.0.0-ghc7.8.3 \
    -lHStime-1.4.2-ghc7.8.3 -lHStransformers-0.3.0.0-ghc7.8.3 \
    -lHSunix-2.7.0.1-ghc7.8.3 -lHSxhtml-3000.2.1-ghc7.8.3 \
    -lHSbase-4.7.0.1-ghc7.8.3  -Wl,-melf_i386

而且我收到很多错误,例如:

ParseInt.o: In function `main':
ParseInt.c:(.text.startup+0x16): undefined reference to `test'
../../dist/ia32/build/libHSrts-ghc7.8.3.so: undefined reference to `base_GHCziWord_W16zh_con_info'
../../dist/ia32/build/libHSrts-ghc7.8.3.so: undefined reference to `base_GHCziConcziSync_runSparks_closure'
../../dist/ia32/build/libHSrts-ghc7.8.3.so: undefined reference to `base_ControlziExceptionziBase_nonTermination_closure'

但是未定义的引用是在基本.so中定义的,因此我针对:

$ nm ../../dist/ia32/build/libHSbase-4.7.0.1-ghc7.8.3.so | grep base_GHCziWord_W16zh_con_info
26690:00550884 T base_GHCziWord_W16zh_con_info
$ nm ../../dist/ia32/build/libHSrts-ghc7.8.3.so | grep base_GHCziWord_W16zh_con_info
104:         U base_GHCziWord_W16zh_con_info

那么, libHSrts为什么看不到libHSrts定义的libHSbase 我按照这里的指示进行操作: http : //www.vex.net/~trebla/haskell/so.xhtml ,并在ParseInt.exe正确连接了ParseInt.exe ,但是后来我向ParseInt.exe包中添加了一些库/写了一堆更多Haskell代码( ParseInt.chsbracket.c不变)。

我已经阅读了有关链接顺序的信息( https://stackoverflow.com/a/409470/1542000 ),并且rts在link命令中早于其依赖的base库,因此我不确定为什么会得到未定义的引用。

我很傻,却错过了显而易见的事情:尝试修复gcc打印的第一个错误。

我设法从test包中导出的模块中删除了test功能。 重新建设在小集团封装test加入到.so ,所有的链接错误就走开了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM