Android NDK编译报错:ld.exe无法找到shlwapi.dll及-ldl
错误信息
错误E2597:ld.exe无法找到shlwapi.dll: No such file or directory
嵌套错误:ld.exe无法找到-ldl
[DCC Fatal Error] F2588 链接器错误代码: 1 ($00000001)
触发背景
安装OnePlus Nord USB驱动(OnePlus_USB_Drivers_Setup.exe)后出现该问题,驱动在C:\Android目录下放置了adb.exe等文件;此前编译正常,已排查以下内容:
- 设备可正常连接PC并被IDE识别
- Java路径配置正常
- 已重装SDK和NDK
shlwapi.dll存在于C:\Windows\System32\和C:\Windows\SysWOW64\目录- 怀疑为路径冲突导致
解决方案
调整系统PATH环境变量优先级
驱动安装后C:\Android可能被加入系统PATH且优先级过高,干扰了NDK链接器的调用。打开系统环境变量设置,将C:\Windows\System32和你的NDK工具链目录(例如C:\Android\ndk\[版本号]\toolchains\llvm\prebuilt\windows-x86_64\bin)移至C:\Android路径的上方,确保系统DLL和NDK的ld.exe被优先调用。锁定IDE的NDK路径配置
打开IDE的Android项目设置(以Delphi为例),确认NDK路径指向正确的版本,避免自动选择到驱动目录下的工具。可以在链接器选项中手动添加NDK工具链的bin目录到搜索路径最顶端。清理
C:\Android下的冲突工具
检查C:\Android目录是否存在ld.exe或其他与NDK同名的工具程序,这些文件会和NDK的链接器产生冲突。若存在,可暂时删除该目录下的冲突文件,或临时将C:\Android从PATH中移除,编译完成后再恢复。修复系统文件权限
尽管shlwapi.dll存在,链接器可能因权限问题无法访问。以管理员身份打开命令提示符,执行sfc /scannow命令修复系统文件的完整性和权限,确保系统DLL能被正常读取。
内容的提问来源于stack exchange,提问作者Error - CPU Not Foud

