Macos 与交叉调用dynlibs的GHCi链接在OSX上失败 背景
编译器:GHC 7.10.3 我必须使用两个动态库(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
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
...