本机库 `kernel32` 被多个包链接到

Posted

技术标签:

【中文标题】本机库 `kernel32` 被多个包链接到【英文标题】:Native library `kernel32` is being linked to by more than one package 【发布时间】:2015-11-09 08:35:02 【问题描述】:

我克隆并尝试构建MIO coroutines library,但它的依赖项似乎冲突:

native library `kernel32` is being linked to by more than one package, and can only be linked to by one package

  kernel32-sys v0.2.0
  kernel32-sys v0.1.4

似乎依赖 time 需要 kernel32 0.1.4,但另外两个依赖 fs2memmap 需要 0.2.0。

我能做些什么来解决它,或者在这种情况下最好的解决方案就是提交错误报告?

在相关说明中,如果 repo 没有 Cargo.lock,这算作错误吗?我已经看到它建议始终将 Cargo.lock 添加到版本控制中以防止出现此类问题。

【问题讨论】:

我建议您在时间箱中发布一个问题,以确保它们更新到 0.2 和一个问题到 mio,因为他们使用的是wildcard dependency versions,这可能是导致此问题的原因 见:github.com/retep998/winapi-rs/issues/238 Cargo.lock 总是被添加到版本控制中 — This is absolutely not universally true。提交二进制文件和应用程序的锁定文件。不要不要为库提交它。 【参考方案1】:

这是一个已知问题,已记录在 on the WinAPI bugtracker。

问题似乎在于维护者发布了一个新版本,将其从 v0.1.x 升级到 v0.2.x。由于某些包依赖(并且将继续依赖,直到它们更新)v0.1.x,Cargo 抱怨这两个依赖项不兼容,并拒绝将它们链接在一起。混乱随之而来。

根据上面提到的问题,现在应该纠正这个问题。

【讨论】:

以上是关于本机库 `kernel32` 被多个包链接到的主要内容,如果未能解决你的问题,请参考以下文章

Windows2008R2无法定位程序输入点于动态链接库kernel32.dll

两个或多个进程同时依赖于一个DLL库?

无法定位程序输入点GetTickCount64与动态链接库KERNEL32.dll上

无法定位程序输入点 GetTickCount64 于动态链接库 KERNEL32.dll 上,怎么办

无法定位InitializeCriticalSectionEx程序输入点于动态链接库kernel32.dll上.

打开软件时出现无法定位程序输入点 GetTickCount64 于动态链接库 KERNEL32.dll 上。