c++ - 发布构建问题;将 std::string 对象传递给静态库函数

标签 c++ string visual-studio-2005 release-builds

这是我第一次尝试将发布版本与 Visual C++ 2005 一起使用,看起来肯定存在一些差异。

我目前的错误是:

Unhandled exception at 0x6ef7d628 (msvcr80d.dll) in <program_name>: 
0xC0000005: Access violation reading location 0x6c2e6769.

我查看了调用堆栈,发现传递给我创建的静态库函数的字符串给出了“Bad Ptr”,我不知道为什么。在调试版本中工作得很好......

这是有问题的行:

int main()
{
    static Script luaScript("config.lua");

Script 只是我制作的一个处理 lua 脚本文件的类。它是静态的,因为我希望它是一个单例,这样任何代码都可以访问它。

脚本构造函数:

Script::Script(const string &filename)
{
    luaState = lua_open();
    scriptFilename = filename; // unhandled exception occurs here; Intellisense     
                               // identifies filename as a <Bad Ptr>
                               // works perfectly fine in debug

}

我想这可能是因为库也处于 Debug模式,但当我尝试使用 Release 时似乎无法编译它。

fatal error C1010: unexpected end of file while looking for precompiled header. 
Did you forget to add '#include "stdafx.h"' to your source?

我对那个文件有点熟悉,但为什么我的静态库的 Release 构建需要它?没有在调试中要求它。

好的,去获取 stdafx.h 文件,然后...一个新的错误出现了!

fatal error C1083: Cannot open precompiled header file: 
'Release\Script.pch': No such file or directory

好吧,除了“Visual C++ 2005 到底想让我为 Release 构建做些什么!?”之外,很难找到所有这一切的中心问题。

我希望有人能提供帮助。谢谢。

最佳答案

修复Cannot open precompiled header file" 的#1 方法是清理/重建所有。
之后,我将从发布版本和调试版本之间的差异开始。打开项目文件或在 Visual Studio 中比较项目设置。
在担心 Bad Ptr 问题之前,让库在发布中构建。 Bad Ptr 问题很可能会在您克服该问题后消失。
否则,我唯一看到的另一件事是您传递的是 char[] 而不是 std::string。我不认为这真的是个问题,但我会尝试

string filename = "config.lua";
static Script luaScript(filename);

在尝试了我提到的所有其他方法之后。

关于c++ - 发布构建问题;将 std::string 对象传递给静态库函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636755/

相关文章:

c++ - 如何避免使用 C++ 宏重新声明变量

c++ - 表达式的行为 : Defined or Undefined?

java - Java ArrayList<String> 的紧凑替代品

java - java中字符串AES加密/解密的内存问题/泄漏

c++ - 如何转义C++字符串中的分号

c++ - 将 Makefile 设置导入 VS2005 IDE

c++ - 异步 Windows 控制台输入同时输出

c++ - 使用迭代器从 boost 多索引中删除项目时的一致性

Java:如何从字符串中抓取每行

c++ - VS2005 - 在同一项目中具有相同名称的多个文件