Hi,
Making a "nice" DLL is a bit of work, all public API needs to be marked as such, all private API should ideally be static, or gcc seems to export them anyway, there should probably be a .def file which usually needs to be touched manually when new public API is added, and a calling convention should be decided on (I suggest stdcall) and yeah some libtool options.
There is ./gsm/libosmogsm.map and ./gb/libosmogb.map already.
We usually try to have all internal symbols static already because there is the same problem with .so file. osmogsm and gb probably have internal inter-file dependency and that's why we use map files to define visible symbols.
Cheers,
Sylvain