问题
(.rodata+0x0): multiple definition of
在头文件中有如下代码:
| 1 | 
 | 
编译的时候出现如下错误:
| 1 | cc -g -Wall -pthread libheca.c dsm_init.c -DDEBUG master.c -o master | 
解决
因为每个c文件中都包含了这个头文件。
| 1 | const struct dsm_config DEFAULT_DSM_CONFIG = { AUTO_UNMAP, NO_ENABLE_COA }; | 
所以每个c文件中都定义了变量dsm_config。如果想只保留一个变量dsm_config应该这样:
| 1 | extern const struct dsm_config DEFAULT_DSM_CONFIG; | 
在一个c文件中做如下定义:
| 1 | const struct dsm_config DEFAULT_DSM_CONFIG = { AUTO_UNMAP, NO_ENABLE_COA }; | 
还有一个解决办法,但相比较上面的不是最佳的,可以在头文件中这样定义:
| 1 | static const struct dsm_config DEFAULT_DSM_CONFIG = { AUTO_UNMAP, NO_ENABLE_COA }; | 
这样在每个c文件中都有一个独立的dsm_config,对其他的是不可见的。