Linux构建QuantLib C#封装运行示例时无法加载NQuantLibc共享库
修复方案
报错本质是Linux动态链接器、.NET运行时都没检索到libNQuantLibc.so的存放路径,手动复制文件、无参数执行ldconfig不生效,都是因为没把库所在路径纳入系统和运行时的搜索范围,按以下步骤操作:
- 定位核心库存放路径
执行命令查找SWIG编译生成的C#原生绑定库位置:find / -name "libNQuantLibc.so" 2>/dev/null
执行ls /usr/local/lib | grep libQuantLib确认QuantLib核心库存在,正常应能看到libQuantLib.so.1.21等相关文件。 - 配置系统动态链接器搜索规则
先删除之前手动复制到各个目录的零散libNQuantLibc.so文件,避免版本冲突。新建链接器配置文件写入库存放路径:
注意配置里只写文件夹路径,不要写具体so文件名。# 将<libNQuantLibc所在目录>替换为上一步find命令查到的实际文件夹路径 sudo echo "<libNQuantLibc所在目录>" > /etc/ld.so.conf.d/quantlib.conf sudo echo "/usr/local/lib" >> /etc/ld.so.conf.d/quantlib.conf sudo ldconfig - 配置.NET运行时原生库搜索路径
进入examples/BermudanSwaption项目目录,新建BermudanSwaption.runtimeconfig.json文件,写入以下内容(替换为实际路径):{ "runtimeOptions": { "additionalProbingPaths": [ "<libNQuantLibc所在目录>", "/usr/local/lib" ] } } - 验证修复
可先在当前终端临时指定动态库路径快速验证:
如果临时指定路径后能正常运行,新开终端执行报错,直接回去检查第二步ldconfig配置里的路径是否写错。export LD_LIBRARY_PATH=<libNQuantLibc所在目录>:/usr/local/lib:$LD_LIBRARY_PATH dotnet run --project examples/BermudanSwaption/BermudanSwaption.csproj - 异常排查
以上操作无效时,进入libNQuantLibc.so所在目录执行ldd libNQuantLibc.so,查看输出中是否存在标记为not found的依赖项,把对应依赖所在目录加入ldconfig配置后重新执行ldconfig即可。
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

