Интересный вопрос.
Ответ тоже интересный.
Как упомянуто в его ответе caf, вы создали два определения global_var.
Чтобы сделать то, что вы пытаетесь достичь, вы должны убедиться, что global_var разрешен из основного исполняемого файла. для этого вам нужно будет создать файл импорта, в котором будет указано, что global_var импортируется из основного исполняемого файла. В файле импорта вы должны использовать # !. для этого.
Затем используйте этот файл импорта при создании библиотеки.
Также при компиляции основного двоичного файла убедитесь, что переменная global_var экспортирована. используйте соответствующие флаги компилятора.
На моем Unix Box я попробовал это, и оно работает.
# cat imp.imp
#!.
global_var
cc main.c -bexpall
cc lib.c -bM:SRE -bnoentry -bI:./imp.imp -bexpall -o libb.so