Loadlibrary Failed with Error 87 | Open QTCreator Failed

在远程连接的电脑上打开QT或使用QT开发的应用时遇到LoadLibrary错误87,参数不正确。尝试多种常规解决方案无效。问题根源在于显卡驱动,具体表现为远程桌面连接(RDP)时加载库失败。解决方法是通过设备管理器禁用显卡驱动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到一个奇怪的问题,打开QT或者QT开发的应用程序会遇到LoadLibrary Failed with Error 87: The paraeter is incorrect。而这种情况只会发生在remote远程连接的电脑上,直接在电脑前打开不会出现。
在这里插入图片描述
尝试了各种方法,例如重命名system32下的atig6pxx.dll磁盘扫描等都无法解决
最后查到是显卡驱动造成的这个问题:
Problem: LoadLibrary fails to load with error 126 or error 87 when working remotely over RDP
解决方法是在硬件设备管理器中禁用显卡。

### LoadLibrary 错误 87 的解决方案 LoadLibrary 函数返回错误87 表示 `ERROR_INVALID_PARAMETER`,即传递给函数的参数无效。此问题通常发生在尝试加载动态链接库 (DLL) 或共享对象文件 (.so) 时,可能由多种原因引起。 以下是可能导致该问题的原因及其解决方法: #### 1. DLL 文件路径不正确 如果指定的 DLL 路径不存在或拼写有误,则会触发错误 87。确保传入的路径是绝对路径或者相对路径能够被程序解析成功[^4]。 ```cpp HMODULE hModule = LoadLibrary("C:\\Path\\To\\Your\\HelloWorldImpl.dll"); if (!hModule) { DWORD errorCode = GetLastError(); printf("Failed to load library, error code: %lu\n", errorCode); } ``` #### 2. 导入库版本冲突 当多个静态或动态库之间存在符号重复定义的情况时,可能会引发类似的错误。例如,在 Windows 平台上编译项目时遇到 msvcprt.lib 和 libcpmtd.lib 同时包含相同符号的问题[^1]。这种情况下应调整项目的链接器设置以避免冲突。 建议仅保留必要的运行时支持库,并确认所有使用的第三方库均兼容当前构建配置(如调试版 vs 发布版)。 #### 3. 缺少依赖项 目标 DLL 所需的一个或多个其他模块未找到也会造成此类异常行为。可以借助工具如 Dependency Walker 来分析具体缺失哪些外部资源。 对于 Linux 系统上的 `.so` 库而言,可通过执行如下命令验证是否存在未满足的依赖关系[^3]: ```bash ldd /path/to/library.so ``` 一旦发现某些条目标记为“not found”,就需要安装相应的软件包或将它们复制至标准搜索位置比如 `/usr/lib`. #### 4. ABI 不匹配 应用程序接口二进制界面(ABI)差异同样容易导致失败情形发生。假如源代码里声明了一个 C++ 类型作为导出实体却没有加上 extern “C”修饰符的话,在跨语言互操作场景下就极有可能碰见这样的状况[^2]。 因此务必遵循正确的封装方式来暴露公共 API 给外界调用者使用。 --- ### 总结 综上所述,针对 LoadLibrary 抛出错误编号为 87 这一现象可以从以下几个方面入手排查并修复: - 验证输入字符串准确性; - 排除多重定义干扰因素; - 定位遗漏的支持组件; - 检查平台特定约束条件是否得到满足。 希望上述指导能帮助您有效定位并解决问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值