I encounter the similar problem.
I found the reason is the driver struct list is defined in miner.h which is included by many c files.
So, I resolve this problem by two steps:
mask the following line in miner.h
/* Use DRIVER_PARSE_COMMANDS to generate extern device_drv prototypes*/
//DRIVER_PARSE_COMMANDS(DRIVER_PROTOTYPE)
add the masked line in the beginning of cgminer.c, after miner.h is included
DRIVER_PARSE_COMMANDS(DRIVER_PROTOTYPE)
It's done.