Compiler Error C2733 - second C linkage of overloaded function 'function' not allowed
If we try to compile with Microsoft Visual C++ 2010 Express a project that includes old Microsoft Platform SDK headers and against old libraries, we have to modify Additional include Directories and Additional library Directories.
When we install Microsoft Visual C++ 2010, it updates the old Windows SDK, adding a new directory in C:\Program Files named Microsoft SDKs. This directory contains new headers and new libs, so if we try to compile an old project with persistent references to the old SDK, Visual C++ will return a bunch of errors C2733 (in my case "second C linkage of overloaded function '_interlockedbittestandset' not allowed").
As said above, the solution is to update the paths in Additional include Directories and Additional library Directories. (example, from C:\Program Files\\Microsoft Platform SDK\Include to C:\Program Files\Microsoft SDKs\Windows\v7.0A\include).
Best regards.
fatal error C1853 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
方案1: 适用于绝大多数文件是 .cpp 或绝大多数文件是.c的情况。在这种情况下,将少数的不同类文件设为不使用预编译头是比较平衡的做法,方法是:对于 VC++6.0,在 FileView 里对要取消预编译头的 .c (或 .cpp) 文件点右键,选择 settings,在弹出的对话框右边选择 category 为 precompiled headers,再设置选项为 not using ...;(对于 VS2005,则在 solution explorer 中对相应文件点右键选择 properties,在 precompiled headers 项下设置 not using... 即可。如果需要设置多个文件,则可以按住 Ctrl 键再同时选中这些文件并设置)PS:解释如下点击项目 点击属性 然后选择C/C++ 预编译头 创建使用头文件 不使用预编译头文件(解决方案资源管理器-右击需要排除的c或cpp文件]-弹出属性菜单-展开C/C++-预编译头-创建/使用预编译头-选择不适用预编译头)
方案2: 影响的文件比较多,则把它们都设置禁止预编译头的话仍然会使项目总体的编译速度大大降低,得不偿失。这时考虑可以为这组文件建立专用的预编译头。在 VC++ 极早期版本(1.5及以前版本)中是支持单个工程中建立分别针对 .c 和 .cpp 的预编译头的,但之后的版本中只支持单独的预编译头。在这种情况下,我们可以在workspace(或 solution)中建立一个新的静态链接库 (Static Library) 工程,将所有的 .c 文件独立出来加入到该工程中单独编译,这样就可以在该静态链接库中针对 .c 文件创建预编译头。但是这样做在一定程度上需要被独立出来的代码在逻辑上是属于同一模块中的,这样才便于维护。不过从设计的角度来说,这个要求一般是满足 的,否则就应考虑下项目的总体设计了:P 最后别忘了设置原项目的依赖项 (dependency) 为独立出来的这个静态库项目。
Re: ERROR: Use of C runtime library internal header file.
Then in VS make sure the Preprocessor Directives and Include file path are
set properly for your project, by doing the following:
1) In VS 2005, go to Project > Properties > C/C++ > Preprocessor, and make
sure that at least these three Preprocessor Definitions are set:
_WIN32_WCE;UNDER_CE;_X86_
Then do either 2A or 2B:
2A) Be sure your INCLUDE environment variable is set to "C:\Program
Files\Windows CE Tools\wce600\
appropriate Include path is). (This is what the compiler uses as the
"Standard Include Path".)
or 2B) In ...C/C++ > Preprocessor, set "Ignore Standard Include Path" to
"Yes (/X)", and in the General settings, set "Additional Include
Directories" to "C:\Program Files\Windows CE Tools\wce600\
Hope this helps...
David K