我有一些InDesign插件的遗留代码,我正在尝试为使用C++ 11支持的XCode编译器的InDesign新版本进行编译。C++:全局范围变量的声明与声明与C语言链接冲突
有一个头文件AdWrksSession.h
,其中包含一个具有C链接的类对象,如下所示。 作为extern
对象/变量的声明所说:
extern "C" CAdWrksSession gAdWrksSession;
和cpp文件AdWrksSession.cpp
包含具有相同名称的默认构造为extern
对象全局类对象:
CAdWrksSession gAdWrksSession;
的旧的编译没有显示任何错误消息,但是当它与Apple提供的XCode 7.2.1的新编译器一起使用并支持C++ 11时,它向我显示以下错误:
Declaration of 'gAdWrksSession' in global scope conflicts with declaration with C language linkage
我曾尝试已经在关注问的问题,为C
联动:
What is "extern linkage and with C language linkage"
Mixing declarations with extern, static and no storage specifier in global scope
我尝试了外部变量声明如下语法在header
文件:
#ifdef __cplusplus
extern "C" {
#endif
CAdWrksSession gAdWrksSession;
#ifdef __cplusplus
}
#endif
和
#ifdef COMPILE_FOR_C_LINKAGE
extern "C" CAdWrksSession gAdWrksSession;
#else
extern "C++" CAdWrksSession gAdWrksSession;
#endif
,但没有奏效。
当我做了header
文件中的声明为static
static CAdWrksSession gAdWrksSession; //Header File
那么代码成功生成,但功能不工作,当然。
UPDATE: 如果我删除C链接,然后我得到一个链接错误如下:
Undefined symbols for architecture x86_64:
"smart::gAdWrksSession", referenced from:
....//Names of generated object files
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1
(use -v to see invocation)`
谁能帮助我在这里?谢谢。
你如何在c中使用C++类?只是好奇。 –
我不认为你可以在C中使用C++类。你可以通过一个接口在C中使用C++模块。 http://stackoverflow.com/questions/11971063/how-to-use-c-objects-in-c – d0mbn00b
那么如何可以'extern“C”CAdWrksSession gAdWrksSession;'使用类类型? –