问题
(.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,对其他的是不可见的。