Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 与交叉调用dynlibs的GHCi链接在OSX上失败 背景_Macos_Haskell_Shared Libraries_Ghc_Haskell Stack - Fatal编程技术网

Macos 与交叉调用dynlibs的GHCi链接在OSX上失败 背景

Macos 与交叉调用dynlibs的GHCi链接在OSX上失败 背景,macos,haskell,shared-libraries,ghc,haskell-stack,Macos,Haskell,Shared Libraries,Ghc,Haskell Stack,编译器:GHC 7.10.3 我必须使用两个动态库(libpetsc和libslepc),其中一个使用另一个的函数。链接应用程序时,我遇到以下错误,其中提到了一个这样的符号(KSPConvergedReasons)。注意。我自己的代码不使用此符号 user specified .o/.so/.DLL could not be loaded (dlopen($SLEPC_DIR/arch-darwin-c-debug/lib/libslepc.dylib, 5): Symbol not found

编译器:GHC 7.10.3

我必须使用两个动态库(
libpetsc
libslepc
),其中一个使用另一个的函数。链接应用程序时,我遇到以下错误,其中提到了一个这样的符号(
KSPConvergedReasons
)。注意。我自己的代码不使用此符号

user specified .o/.so/.DLL could not be loaded
(dlopen($SLEPC_DIR/arch-darwin-c-debug/lib/libslepc.dylib, 5): Symbol
not found: _KSPConvergedReasons
  Referenced from: $SLEPC_DIR/arch-darwin-c-debug/lib/libslepc.dylib
  Expected in: flat namespace
 in $SLEPC_DIR/arch-darwin-c-debug/lib/libslepc.dylib)
毫无疑问,
nm-u
\u KSPConvergedReasons
显示为未定义的原因 符号(见下文)。 我不明白这种行为的原因,因为我第一次编译 与所有相关的PETSc和SLEPc头和链接 戴利布斯先生

注意: 被调用方库(
libpetsc
)中确实存在有问题的符号(
KSPConvergedReasons
):

构建+链接序列 构建从我自己的库生成的C代码,该库反过来使用前面提到的两个lib的头:

gcc -c -g -w ${SRCDIR}/Internal/InlineC.c -o ${LIBDIR}/InlineC_c.o -I${PETSC_DIR_ARCH}/include -I${PETSC_DIR}/include -I${SLEPC_DIR_ARCH}/include -I${SLEPC_DIR}/include
链接:

stack exec ghci ${SRCDIR}/Spec.hs ${SRCDIR}/Internal/InlineC.hs  ${LIBDIR}/InlineC_c.o  -- -isrc/ -L${PETSC_DIR_ARCH}/lib -L${SLEPC_DIR_ARCH}/lib -lpetsc -lmpich -lslepc
问题: 为什么会发生这种情况?我如何解决

提前感谢您的指点, 马可


调用dynlib时未定义的符号:

$ nm -u libslepc.3.7.1.dylib | grep KSP

_KSPAppendOptionsPrefix
_KSPConvergedReasons
...
$ nm -u libslepc.3.7.1.dylib | grep KSP

_KSPAppendOptionsPrefix
_KSPConvergedReasons
...