1. If original function marked as tm_callable has external visibility (not marked as static) auxilary symbols (foo._$TXN, foo._$nonTXN) will have the same external visibility. If it is not so please report platform (32/64bit and OS) and we'll try to reproduce this issue. It is importnat to remember that library shall be built with -Qtm_enabled knob otherwise any TM-specific constructs will not have any effect and this, depending on platform, may be either error or just warning.
2. It is very important that declaration of function (foo()) with tm_callable mark is visible at any its use (throught header file or pre-declaration). However, violation of this rule should not lead to undefined reference diagnostics. It will result in tx_warnings and, effectively, execution of foo() irrevocably (serially).
Regards,
Serge Preis