编译版本时遇到ld连接错误 warning: multiple common of “CGM_MUTEX_SEM”, 把CGM_MUTEX_SEM的声明和定义放到同一个c文件中解决。其他c文件通过extern引用。
附 ld warning信息:
警告信息.
这里给出三种类型的全局符号的解释(用C语言):
`int i = 1;'
一个定义, 它会存在于输出文件中的已初始化数据节.
`extern int i;'
一个未定义符号,它不占用空间. 必须在另外某一处对它有一个定义,或一个普通符号
`int i;'
一个普通符号.如果对于一个变量只有(一个或多个)普通符号, 它进入输出文件的未初始化数据域. 连
接器会把同一变量的多个普通符号合并成一个单一的符号. 如果他们有不同的大小, 它采用最大的一
个. 如果是对同一变量的定义,连接器把一个普通符号转化为一个声明.
'--warn-common'选项可以产生五种类型的警告. 每种警告由两行组成: 第一行描述遇到的符号, 第二
行描述遇到的前一个具有相同名字的符号. 一个或两个都可能成为普通符号.
1. 把一个普通符号转化为一个引用, 因为这个符号已经有一个定义了.
FILE(SECTION): warning: common of `SYMBOL'
overridden by definition
FILE(SECTION): warning: defined here
2. 把一个普通符号转化为一个引用,因为遇到了第二个关于符号的定义. 这跟前一种情况相同,除了符
号遇到的顺序相反.
FILE(SECTION): warning: definition of `SYMBOL'
overriding common
FILE(SECTION): warning: common is here
3. 把一个普通符号跟前一个相同大小的普通符号合并.
FILE(SECTION): warning: multiple common
of `SYMBOL'
FILE(SECTION): warning: previous common is here
4. 把一个普通符号跟前一个更大的普通符号合并.
FILE(SECTION): warning: common of `SYMBOL'
overridden by larger common
FILE(SECTION): warning: larger common is here
5. 把一个普通符号跟前一个更小的普通符号合并. 这跟前一种情况相同, 除了遇到的符号的顺序不同.
FILE(SECTION): warning: common of `SYMBOL'
overriding smaller common
FILE(SECTION): warning: smaller common is here
阅读(2971) | 评论(0) | 转发(0) |