11

我正在使用 Visual C++ 2008 开发的项目中使用 Fmod。如果我包括

../fmodapi375win/api/lib/fmodvc.lib

在项目->链接器->输入中,它工作正常,但出于某种原因,如果我使用

#pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib")

相反,它的工作方式与该行不存在一样:它构建时没有链接器错误,然后因一百万个访问冲突异常而导致堆栈溢出而崩溃。

发生了什么事,我该如何解决它,以便我可以在代码中定义库?

4

4 回答 4

7

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

#pragma comment(lib,"fmodvc")

您应该能够在此评论中使用路径,但您确定您使用的 ..\ 路径在链接期间是正确的路径吗?还要确保您没有使用 /nodefaultlib 进行编译...

如果这仍然不起作用,请告诉我。我经常使用这种类型的编译指示,并取得了巨大的成功......

但是,现在我几乎被困在 C# 世界中,我什至没有太多时间用 C++ 编程了......

于 2009-03-20T19:18:08.167 回答
1

库可以以另一种顺序链接,因此符号的解析方式不同。

于 2009-02-17T09:51:42.310 回答
0

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

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

另一件事是在链接期间运行 PROCMON.EXE(预过滤,以便 PATH 包含 fmodvc.lib)——然后链接。它会告诉您找到文件的确切位置(以及是否曾经查找过)。在此处获取 PROCMON:http ://technet.microsoft.com/en-us/sysinternals/bb896645.aspx

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

于 2009-03-19T15:54:40.003 回答
0

你绝对确定它在两个实例中是同一个 lib 文件吗?

如果您错过了机器上有两个文件版本的事实,这可能会变得非常奇怪。我强烈建议您在驱动器中搜索所有出现的该文件,以便进行完整性检查。

于 2009-03-23T02:58:51.503 回答