问题标签 [vc8]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - VC9 和 VC8 库兼容性
(最初的问题是在那里提出的:http ://www.ogre3d.org/phpBB2/viewtopic.php?t=44832 )
有人问:“虽然我想在 vs2008 (VC9) 中构建所有内容,但 PhysX SDK 是使用 vs2005 (VC8) 构建的。使用所有 vc9 编译的库并与此 vc8 库结合使用会导致任何问题吗?”
我回答说,在我尝试使用 VC8 生成的 .lib 文件(和 .dll)并将其包含在 vc9 编译的 exe 中的前一天,编译器无法打开 .lib 文件。
现在,其他人回答说他们这样做没有问题......
我找不到有关 vc9 和 vc8 之间的 lib 兼容性的信息。
所以……救命?
visual-c++ - 从 VC8 (VS2005) 到 VC9 (VS2008) 的移植问题是什么?
我继承了一个在 VC8(VS2005)下构建和测试的非常庞大而复杂的项目(实际上是一个由 119 个“项目”组成的“解决方案”,其中大部分是 DLL),我的任务是将它移植到 VC9 (VS2008)。
我使用的移植过程是:
- 复制 VC8 .sln 文件并将其重命名为 VC9 .sln 文件。
- 复制所有 VC8 项目文件,并将它们重命名为 VC9 项目文件。
- 编辑所有 VC9 项目文件,s/vc8/vc9。
- 编辑 VC9 .sln, s/vc8/vc9/
- 使用 VS2008 加载 VC9 .sln,并让 IDE“转换”所有项目文件。
- 修复编译器和链接器错误,直到我得到一个好的构建。
到目前为止,我在最后一步中遇到了以下问题。
1) 修饰名称的计算方式发生变化,导致名称被截断。
这不仅仅是一个警告 ( http://msdn.microsoft.com/en-us/library/074af4b6.aspx )。使用此警告构建的库不会与其他模块链接。应用 MSDN 中给出的解决方案并非易事,而是可行的。我在如何增加 VC9 (MSVC 2008) 中允许的修饰名称长度?
2) 不允许将零分配给迭代器的更改。这是符合规范的,很容易找到并修复这些以前允许的编码错误。不要将零分配给迭代器,而是使用值 end()。
3) for-loop 范围现在符合 ANSI 标准。另一个容易解决的问题。
4) 预编译头文件需要更多空间。在某些情况下,需要更多的空间。我最终使用 /Zm999 来提供最大的 PCH 空间。如果 PCH 内存使用量再次增加,我认为我将不得不完全放弃 PCH,并忍受已经很长的构建时间的增加。
5) 对复制 ctor 和默认 dtor 的要求有所改变。似乎在模板类中,在我还没有完全弄清楚的某些条件下,编译器不再生成默认 ctor 或默认 dtor。我怀疑这是 VC9 中的一个错误,但可能还有其他我做错的事情。如果是这样,我肯定想知道它是什么。
6) sln 和 vcproj 文件中的 GUID 没有改变。这似乎不会以我可以检测到的任何方式影响构建,但仍然令人担忧。
请注意,尽管存在所有这些问题,该项目还是在 VC8 下构建、运行并通过了广泛的 QA 测试。我还将所有更改移植到 VC8 项目中,它们仍然像以前一样愉快地构建和运行(使用 VS2005/VC8)。因此,我为 VC9 构建所需的所有更改至少看起来是向后兼容的,尽管回归测试仍在进行中。
现在解决真正困难的问题:我遇到了 VC8 和 VC9 项目的启动顺序不同。该程序使用了一个仿照 Loki 的小对象分配器,在 Andrei Alexandrescu 的 Book Modern C++ Design中。该分配器使用主程序模块中定义的全局变量进行初始化。
在 VC8 下,这个全局变量是在程序启动的最开始时从模块 crtexe.c 中的代码构造的。在VC9下,第一个执行的模块是crtdll.c,表示启动顺序发生了变化。正在启动的 DLL 似乎通过在全局对象初始化统计信息之前分配和取消分配内存来混淆小对象分配器,这会导致一些虚假的诊断。该程序的运行似乎没有受到实质性影响,但 QA 人员不会允许虚假诊断通过他们。
有没有办法在加载 DLL 之前强制构建全局对象?
我可能会遇到哪些其他移植问题?
visual-studio - 根据VC++编译器版本进行条件编译
我正在将我们的 VC++ 项目从 Visual Studio 2005 (VC8) 迁移到 Visual Studio 2008 (VC9)。解决方案中的一些项目在项目设置的“附加库目录”字段中具有第三方库的路径。路径看起来像这样:
..\SomeLibrary\Lib\vc9\x86
如果我可以使用 Visual Studio 的“Property Page Macros”之一来替代编译器版本,这将非常有用,就像我可以使用 $(ConfigurationName) 来替代“Debug”或“Release”一样。类似以下的内容将是完美的:
..\SomeLibrary\Lib\ $(CompilerVersion) \x86
不幸的是,我找不到合适的宏。
请注意,当我说“宏”时,我指的是 Visual Studio 的“属性页宏”,而不是 C/C++ 预处理器宏。据我所知,您不能在项目设置中使用预处理器指令。
有谁知道这样做的方法?
php - 用 VC8 构建的 PHP APC DLL
我正在寻找使用 VC8 构建的 php_apc.dll 副本。我找到了一个用 VC9 构建的,但是我用 ZendServer CE 获得的 PHP 发行版说它需要用 VC8 构建。
任何帮助将不胜感激。谢谢,
戴夫
c++ - 使用 Visual Studio 2005(VC8) 时出现链接错误
我在尝试链接可执行文件的发布版本时遇到一堆链接错误(调试版本没有相同的问题)。比较链接的命令行不会发现任何问题。大致有两种类型的错误,我都无法处理。
第一种抱怨未解析的外部符号_declspec(dllimport)举例:error LNK2019: unresolved external symbol " _declspec(dllimport) public: __thiscall stlpd_std::basic_string,class stlpd_std::allocator >::basic_string,class stlpd_std: :allocator >(class stlpd_std::basic_string,class stlpd_std::allocator > const &)" (_ imp ??0?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@ stlpd_std@@QAE@ABV01@@Z) 在函数“public: __thiscall Springfield::generic::runtime_error::runtime_error(class stlpd_std::basic_string,class stlpd_std::allocator > const &)”中引用 (??0runtime_error@generic @Springfield@@QAE@ABV?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@@Z)
对于更易于阅读的版本(替换所有字符串):错误 LNK2019:未解析的外部符号“__declspec(dllimport)公共:__thiscall string::basic_string,class stlpd_std::allocator >(class string const &)”(_ imp ?? 0?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@QAE@ABV01@@Z) 在函数“public: __thiscall Springfield::generic::runtime_error: :runtime_error(class string const &)" (??0runtime_error@generic@Springfield@@QAE@ABV?$basic_string@DV?$char_traits@D@stlpd_std@@V?$allocator@D@2@@stlpd_std@@@ Z
第二类错误抱怨未解析的外部符号__CrtDbgReportW
我希望我能对处理这个问题有所了解。
debugging - C++/Visual Studio 2005 - 在编译调试配置期间跳过模板类
我有一个模板类,它一直可以在Debug中编译,没有问题。但是突然之间,它拒绝检测类的更改并跳过它,除非我重建。其他非模板类没有问题,在Release编译时也不会出现这个问题,所以我暂时就这么用。
奇怪的是,我创建了一个新项目,并且出现了同样的问题。
有任何想法吗?
非常感谢。:)
c - C VC8 项目可执行文件未在未安装 vc8 的机器中执行
由 C 项目(在 windows 7 中)生成的可执行文件正在安装vc8
的所有 windows 机器(win xp 和 7)中vc8
运行。vc8
但它没有在一台未安装但已安装的win xp机器上运行vc6
。错误信息是System cannot run the executabe
。
这是因为我的 vc8 项目没有生成 vc6 兼容的 exe 吗?请有人帮助有什么办法可以解决这个问题。
注意:创建 vc6 项目并添加所有 c 文件是一项复杂的任务,这对我来说会花费很多时间。
merge-module - VC 合并模块未更新
不久前我发布了一个问题:
https://stackoverflow.com/questions/16123872/visual-c-runtime-8-0-50727-6910-merge-module
我有一个问题,我可以找到合并模块的特定版本。
我已经尝试重新安装 Visual Studio 2005 和 2008 的 SP1,并且两个运行时(8 和 9)的合并模块在 (C:\Program Files (x86)\Common Files\Merge Modules) 中没有正确更新。唯一的 VC 合并模块是原来的 8 和 9 模块。
我正在运行 Windows 8 Enterprise x64。有谁知道 VC8/9 合并模块没有通过 Windows 8 上的 Visual Studio 更新过程正确更新的任何问题?
c++ - Loki::Factory 在程序退出时抛出异常
我正在尝试在使用Loki::Factory
VC8 编译的项目中使用(我不允许切换到较新的编译器)。程序退出时出现问题,我可以使用此基本代码重现该问题(这是您在使用工厂时可能想要实现的最起码)
一切都很好,直到系统暂停要求使用按键(如system("pause")
);但是,当我按下键时,由于从函数内部抛出未处理的异常,程序中止
可以在 Visual Studio 文件“内存”中找到。异常是访问冲突,堆栈以:
std::auto_ptr
我在互联网上找不到任何关于使用Loki 的参考。
如何解决问题?