Visual c++ 为什么不是';难道这个库没有链接到pragma注释吗? 我在Fixd中使用Visual C++ 2008中的一个项目。如果我包括 ../fmodapi375win/api/lib/fmodvc.lib

Visual c++ 为什么不是';难道这个库没有链接到pragma注释吗? 我在Fixd中使用Visual C++ 2008中的一个项目。如果我包括 ../fmodapi375win/api/lib/fmodvc.lib,visual-c++,linker,pragma,Visual C++,Linker,Pragma,在Project->Linker->Input中,它可以正常工作,但由于某些原因,如果我使用 #pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib") 相反,它的工作原理与该行不存在时的工作原理相同:它构建时没有链接器错误,然后由于一百万个访问冲突异常导致堆栈溢出而崩溃 发生了什么,如何修复它,以便在代码中定义lib?Libs可以按其他顺序链接,因此符号的解析方式不同。在链接的命令行上设置/VERBOSE。在GUI中,您可以在项目的属

在Project->Linker->Input中,它可以正常工作,但由于某些原因,如果我使用

#pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib")
相反,它的工作原理与该行不存在时的工作原理相同:它构建时没有链接器错误,然后由于一百万个访问冲突异常导致堆栈溢出而崩溃


发生了什么,如何修复它,以便在代码中定义lib?

Libs可以按其他顺序链接,因此符号的解析方式不同。

在链接的命令行上设置/VERBOSE。在GUI中,您可以在项目的属性页上执行此操作——添加到链接器下的“命令行”节点

然后它将告诉您如何解析每个函数——搜索您知道应该在fmodvc.lib中的函数

另一件事是在链接过程中运行PROCMON.EXE(预筛选以便路径包含fmodvc.lib)——然后链接。它将告诉您找到文件的确切位置(以及它是否曾经查找过该文件)。在此处获取PROCMON:


最后,如果是链接,但没有加载库(或解析引用)——您可以选择强制链接成功设置——您应该关闭该选项。它应该在命令行部分(比如/VERBOSE)。

我不认为您应该在pragma注释中提供.lib,但是,我认为真正的问题在于您是通过路径调用注释的。将路径添加到lib搜索路径中,然后只需使用

#pragma comment(lib,"fmodvc")
您应该能够在此注释中使用路径,但您确定在链接期间使用的..\path是正确的路径吗?还要确保您没有使用/nodefaultlib进行编译

如果这仍然不起作用,请告诉我。我经常使用这种类型的pragma,非常成功


<>但是,现在我已经被困在C世界了,我没有太多时间在C++中编程……/p> 你绝对确定这两个实例中的LIB文件是相同的吗?
如果您忽略了一个事实,即您的计算机上有两个版本的文件,这可能会变得非常奇怪。我郑重建议您在驱动器中搜索此文件的所有实例,以便进行健全性检查。

Process Monitor将查找静态链接的库?在链接过程中,是的。在链接过程中,链接器必须尝试打开文件——procmon会看到。Stuart,我从这篇文章开始就回去了,我使用了你正在使用的#pragma,它确实有效。你只需要确保你实际上是从正确的目录链接。我的猜测是../不正确,因为链接器在$(TargetDir)目录下工作。。。希望这有帮助。如果它仍然不起作用,请告诉我,我将进一步深入…+1了解关于/nodefaultlib的观察结果。这会使“#pragma comment(lib,…”)无法工作,这让我措手不及。