我在我正在使用Visual C ++ 2008的项目中使用Fmod。如果我包含
../fmodapi375win/api/lib/fmodvc.lib
在Project-> Linker->输入中,它工作正常,但出于某种原因,如果我使用
#pragma comment(lib,"../fmodapi375win/api/lib/fmodvc.lib")
相反,它的工作方式与该行不存在的方式相同:它构建时没有链接器错误,然后崩溃,堆栈溢出来自一百万次访问冲突异常。
发生了什么,我该如何修复它以便我可以在代码中定义lib?
答案 0 :(得分:7)
我不认为你应该在pragma注释中提供.lib,但是,我认为真正的问题是你是通过路径调用注释。将路径添加到lib搜索路径,然后只使用
#pragma comment(lib,"fmodvc")
您支持在此注释中使用路径,但是您确定您使用的.. \路径是链接时间内的正确路径吗?另外请确保您没有使用/ nodefaultlib编译...
如果这仍然不起作用,请告诉我。我经常使用这种类型的pragma,取得了巨大的成功......
但是,现在我已经陷入了C#世界,我甚至没有太多时间用C ++编程......
答案 1 :(得分:1)
Libs可以按另一个顺序链接,因此符号的解析方式不同。
答案 2 :(得分:0)
在链接的命令行上设置/ VERBOSE。在GUI中,您可以在项目的属性页面上执行此操作 - 添加到链接器下的“命令行”节点。
然后它将告诉你如何解决每个函数 - 搜索你知道应该在fmodvc.lib中的函数。
另一件事是在链接期间运行PROCMON.EXE(预过滤以便PATH包含fmodvc.lib) - 然后链接。它会告诉你它找到文件的确切位置(如果它曾经找过它)。在这里获取PROCMON:http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
最后,如果它是链接,但没有加载你的库(或解析引用) - 你可以选择强制链接成功设置 - 你应该关闭它。它在命令行部分是/FORCE(如/ VERBOSE)。
答案 3 :(得分:0)
你是否完全确定它是两个实例中的同一个lib文件?
如果您错过了计算机上有两个版本的文件,这可能会非常奇怪。我认真地建议你搜索你的驱动器中所有出现的这个文件只是为了进行健全性检查。