我确实有一个通过 Haskell FFI 使用 Java Native Interface 的库(可作为库 libjvm 使用)。因此,一些胶水代码在 ac 文件中,函数通过 FFI 导入,仅此而已。
使用 cabal,我指定了“框架:JavaVM”,并且神奇地一切正常。但是,只有 Java 6 带有框架(自从 oracle 接管后,Java 7 就没有安装这样的包了)。所以我试图将我的库与 libjvm 链接,而不是与框架 JavaVM 链接。
我正在为 ghc 使用以下标志:
-ljvm
-L/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/server
-L/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib
-optl-Wl,-rpath,/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home/jre/lib/server
它们--ghc-options
通过 cabal 传递到 ghc。同样,结果应该是一个库。无论我是否指定这些标志,编译和安装都会成功,但是当我构建依赖于我的库编译的可执行文件时(它无法从 libjvm 中找到符号)。
如果我手动链接这些可执行文件(使用上面的确切标志)一切都很好。但我不想把这个负担强加给图书馆的用户,我想要和frameworks: JavaVM
解决方案一样的“舒适”。
我真的被困在这个问题上,我怎样才能让 ghc 将我的库与 libjvm 链接?我还查看了详细输出(“--ghc-option=-v3”),但我找不到任何链接标志的痕迹(但我也看不到任何框架,这就是为什么我真的很困惑)。