出错定位
arm架构的MacBook能够正常安装1.3.2
版本的USEPA/WNTR工具箱,但在实际使用过程中会出现闪退情况。经定位错误的原因是wntr/epanet/toolkit.py
中载入epanet
动态链接库时出错:
if float(version) == 2.0:
libname = libepanet.replace('epanet22.','epanet20.')
if 'arm' in platform.platform():
raise NotImplementedError('ARM-based processors not supported for version 2.0 of EPANET. Please use version=2.2')
else:
libname = libepanet
libname = resource_filename(__name__, libname)
if os.name in ["nt", "dos"]:
self.ENlib = ctypes.windll.LoadLibrary(libname)
else:
self.ENlib = ctypes.cdll.LoadLibrary(libname) # 导致闪退的代码
错误原因
经查这一代码载入的是wntr/epanet/libepanet/darwin-arm/libepanet2.dylib
动态链接库,这一链接库是核心的EPANET计算引擎,WNTR依赖这一链接库来进行计算。
解决方案
Open Water Analytics组织在维护OpenWaterAnalytics/EPANET这一项目,它支持arm架构的macOS。clone后用如下方式编译:
mkdir build
cd build
cmake ..
cmake --build . --config Release
在build/lib
目录中有libepanet2.dylib
文件,用这一文件替换WNTR
中自带的链接库后即可正常计算。