Unity导入Windows静态库插件报错DllNotFoundException寻求解决方法
解决Unity中静态库PInvoke报错DllNotFoundException的方案
明确核心逻辑:PInvoke是运行时动态加载DLL的机制,
.lib静态库是编译时链接的二进制文件,无法直接通过DllImport调用——这也是你用DLL正常、用静态库报错的根本原因。方案一:将静态库编译为动态链接库(推荐)
- 获取cspice的源码或官方编译工程,重新编译生成
.dll文件,替换当前的.lib文件放到Assets/Plugins/x64目录,保持DllImport("cspice")的调用代码不变即可正常运行。 - 若没有源码,优先查找官方提供的预编译DLL版本,避免自行编译的兼容性问题。
- 获取cspice的源码或官方编译工程,重新编译生成
方案二:用C++插件封装静态库
- 创建C动态链接库工程,将
cspice.lib作为依赖库链接到工程中,编写封装函数暴露给C#调用。示例C代码:#include "cspice.h" extern "C" __declspec(dllexport) void furnsh_c_wrapper(const char* file) { furnsh_c(file); } - 编译生成新的DLL(比如命名为
cspice_wrapper.dll),放到Unity的Plugins目录,修改C#调用代码:[DllImport("cspice_wrapper")] public extern static void furnsh_c_wrapper(string file); - 该方式通过自定义DLL封装静态库功能,间接适配Unity的PInvoke机制。
- 创建C动态链接库工程,将
额外检查项
- 确认静态库的编译架构为x64,与Unity设置的架构完全匹配,避免因架构不兼容导致加载失败。
- 若使用方案二,确保C++工程的运行时库选项(如MT/MD)与Unity兼容,避免运行时CRT冲突。
内容的提问来源于stack exchange,提问作者Datri
相关产品推荐
相关产品推荐

