My first running environment didn't print guile errors (I still don't know why). I deduce the message by break point, and stack data. I saw 'Unbound variable: ~S' and the first scm object in args was translated as 'define-private'.
Then today I setup a PC environment with the same config.h, and test again. I saw the real error is '(define-private _ gettext)' and 'Unbound variable: gettext'.
The project is supposed to handle guile error at high-level code, but it failed handling for some unknown reason. So it takes some extra time to work it out. However, after the error thrown the guile thread just quit (printing nothing) and left a silent running process, it's wired.