使用Debug Postfix

时间:2018-01-30 18:57:02

标签: java c++ windows dll

在Windows上,有时构建本机DLL,使得调试版本上有一个'd'后缀:Mylibd.dll vs MyLib.dll(Boost将此作为示例)。

如何在Java中正确地使用System.load或System.LoadLibrary动态加载这些库?我已经看到这些类型的问题通常通过让构建过程编译具有另一个lib名称的Java源文件的备用副本来克服,因为没有预处理器。如果可能的话,我想避免这种情况(对我而言,它不必要地使构建复制并复制源文件)。

我也不想尝试加载两者(一个作为后备):我希望我的发行版只加载发行版本并仅调试调试。

一些背景和动机:我有一个构建我们整个堆栈的CMake构建:本机C ++库,Java SWIG包装器和.NET包装器,用于多种配置(调试,发布等)。所以我为每个配置获得了完全不同的构建。我们只发布Java包装器的发布版本但是为了调试我想正确加载具有'd'后缀的调试库。

目前,我们只是将调试/发布JNI DLL版本构建为具有相同的名称。但是,这打破了我们如何构建其他本机DLL的模式,这些DLL具有用于调试的“d”后缀。我们实际上发布了这些库的调试版本,因为它们在API中需要动态C运行时的C ++。所以我希望JNI DLL尽可能接近构建的其他工件。

0 个答案:

没有答案