【发布时间】:2018-12-12 11:50:24
【问题描述】:
我们有一个 .NET Framework 项目,它引用了 Fico Xpress 求解器 dll。所需的dll是–
- Xprb.dll
- Xprbdn.dll
- Xprsdn.dll
由于没有可用于使用 Fico Xpress Solver 的 nuget 包,我们安装了 Fico Xpress Solver 并将这些 dll 从安装目录复制到项目文件夹内名为 lib 的本地文件夹并添加路径引用到lib文件夹中的这些dll。因此在编译时,项目使用这些 dll 的引用(存在于 lib 文件夹中)进行编译。该项目成功构建。当我们的项目调用 Fico Xpress Solver 时,上面需要的 dll 来自 安装目录 可能通过 环境变量 访问(本地文件夹中的 dll 只是为了成功编译代码,我们可以将其指向实际的 Fico Xpress Solver 安装目录,但我们将 dll 放在 lib 文件夹中,以便我们可以将其添加到 SVN)并且项目使用成功运行Fico Xpress 求解器。
现在,我们已将项目移植到 .NET Core,以便在 Linux 机器上运行相同的项目。于是我们在Linux机器上安装了Fico Xpress Solver,并使用/opt/xpressmp/bin/文件夹内的优化器可执行文件测试是否安装成功(这是linux机器的默认安装目录) .安装成功,Fico Xpress Solver 运行正常(使用他们网站上给出的方法检查)。
当我们构建项目时,它编译成功,因为它仍然引用本地 lib 文件夹中所需的 dll。但是,当我们的项目在运行时调用 Fico Xpress Solver 时,它会失败,因为它无法加载所需的 dll(它可能在设置为 /opt/ 的 LD_LIBRARY_PATH 中搜索xpressmp/lib/ 由安装手册中指定的 /opt/xpressmp/bin/xpvars.sh 脚本设置。此文件夹包含所有 .so 文件,没有 dll 文件。)错误如下 -
无法加载共享库“xprb.dll”或其依赖项之一。 为了帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量:libxprb.dll:无法打开共享对象 文件:没有这样的文件或目录
我们不确定我们使用的方法,即使用 dll 编译和运行是否正确,或者我们是否必须使用 .so 文件来编译和运行项目。由于代码构建成功,我们预计它会运行,但找不到共享对象文件。
有人可以指定在 linux 中使用 Xpress 求解器的方法,或者在 Windows 和 linux 上使用相同的 3rd 方软件时需要遵循的一些一般准则。我们是否需要更改代码或添加对 .so 的引用而不是 .dll 文件
DllImport是做到这一点的唯一方法吗(在不同的博客上建议)
【问题讨论】:
标签: c# linux dll .net-core solver