我使用Boosiv1.44.0来交叉编译Python的C++代码。我尝试公开exposuresinosoid.h中定义的静态常量,如下所示:
static const UINT _min_exp = 20;
在档案里扩展.cpp,根据Boost团队的文档,我正试图这样揭露它们:
^{pr2}$这个库编译得很好,但是当程序运行时,我得到以下错误:
ImportError: ../linux/appfs/master/usr/lib/python2.6/pa/vision/_vision.so: undefined symbol: _ZN16ExposureSinusoid8_min_expE
为了排除Boost没有找到常数的可能性,我尝试在扩展.cpp但库无法编译。因此,似乎在编译过程中找到了常量,但它没有被正确地公开。在
静态链接意味着符号在TU之外是可见的!将
static
更改为extern
(因为全局常量隐式静态):更正:我没有看到
^{pr2}$_min_exp
是一个成员变量,抱歉。在这种情况下,答案是,正如ildjarn已经说过的,在类定义之外添加变量的定义。可以肯定的是,声明和初始化都在内部,但定义在外部:除了声明之外,
static
数据成员还必须是定义的。在唯一可以省略^ {< CD1>}数据成员定义的情形是当所讨论的数据成员是^ {< CD3>}基本积分类型时,和用常数表达式初始化,和它从未使用ODR(参见C++ 03标准,〈〈94.2/4)〉;获取变量的地址限定为ODR用法,因此在您的情况下必须提供定义。在
相关问题 更多 >
编程相关推荐