How about the following idea instead? Have sig2str.h export an array like this:
extern char const allsigstr[]; This would consist of a concatenation of null-terminated strings, one per name, terminated by an empty string. allsigstr could be initialized at compile-time, with no runtime actions needed. Since it's read-only and initialized it could be put into the text segment. The existing numname_table could remove its 'name' field, and replace it with an integer offset into allsigstr. This offset could also be calculated at compile-time, so numname_table could live in the text segment too.