1

为了让故事更短,我编译了 gperf2.0 项目,并将输出添加到另一个项目的“lib\Release”和“lib\Debug”文件夹中。然后,我将 libtcmalloc_minimal.lib 文件添加到发布配置的链接器输入中,并将 libtcmalloc_minimal-debug.lib 文件添加到调试配置中,附加库文件夹设置为:$(ProjectDir)lib\Release 用于发布,$( ProjectDir)lib\Debug 用于调试。我还添加了一个构建后事件:复制 "$(ProjectDir)lib\Release*. " "$(TargetDir)" 用于发布,复制 "$(ProjectDir)lib\Debug .*" "$(TargetDir)" 用于调试。

问题?

错误 3 致命错误 LNK1181: 无法打开输入文件 '..\lib\Debug\libtcmalloc_minimal-debug.lib' 框架框架

当我在发布配置中构建项目时,它给了我。为什么要使用调试库?我三次检查了命令行输出,它使用了正确的文件夹。那么给了什么?(/LIBPATH:"g:\licenta\Framework-transfer_RO-03may-94b4df\Framework\Framework\lib\Release")

编辑

我还应该补充一点,在另一台 PC 上编译成功,我手动添加了 lib 路径,没有使用 $ 关键字。但是,在这台 PC 上,即使编译了 lib 文件,它也会给我链接器错误。我讨厌链接器。

编辑 2

我还应该提到,lib 文件是 dll 的导入库。该dll是在两台PC上编译的。

编辑 3

即使手动添加了 lib 路径,它也不起作用。我一直在尝试解决这个问题一个小时,这很烦人。我真的很讨厌链接器。

编辑 4

我已经删除了对该 lib 文件的所有引用,包括标头、dll 等。它仍然给了我这个:

错误 3 致命错误 LNK1181: 无法打开输入文件 '..\lib\Debug\libtcmalloc_minimal-debug.lib' 框架框架

什么。

4

1 回答 1

1

不要使用链接器项目属性来尝试解决此问题。相反,通过右键单击解决方案资源管理器窗口中的项目名称,选择“添加现有项”,然后使用文件浏览器选择所需的.lib文件,将库直接添加到项目中。

这有点复杂,因为您希望同时拥有库的 Debug 和 Release 版本。要解决此问题,请使用我描述的方法将libtcmalloc_minimal.lib和添加到项目中。libtcmalloc_minimal-debug.lib然后:

  1. 右键单击libtcmalloc_minimal.lib(在“解决方案资源管理器”窗口中),选择“属性”,将“配置”设置为“调试”并将“从构建中排除”设置为“是”。单击确定。
  2. 对 执行相同的libtcmalloc_minimal-debug.lib操作,只是这次您将“发布”配置与“从构建中排除”= YES 的配置相同。

(所以libtcmalloc在Debug版本libtcmalloc中排除了Release,在Release版本中排除了Debug。否则它会尝试同时链接两个库。)

Visual Studio 知道,如果.lib项目文件中列出了某个文件,则应将其传递给具有正确相对路径的链接器。它还知道不要打扰项目中为当前配置(调试或发布)设置了“从构建中排除”的任何文件。

于 2012-05-04T05:57:41.070 回答