We have noticed in attempting to port to Tcl 8.6.6 that the symbols that used to be visible in the sqlite3 shared library are no longer visible. Since we use sqlite3 both from within Tcl as well as through its native 'C' interface, this is causing unresolved symbols during our link. So, for example, the symbol for sqlite3_exec used to show up as:
tcl8.6.4$ nm ./unix/pkgs/sqlite3.8.8.3/
libsqlite3.8.8.3.so | grep sqlite3_exec
000000000007c160 T sqlite3_exec
tcl8.6.6$ nm ./unix/pkgs/sqlite3.13.0/
libsqlite3.13.0.so | grep sqlite3_exec
0000000000089b90 t sqlite3_exec
where the change from T to t indicates that the symbol has been marked private. It now causes link errors when we attempt to link with the library.
Questions:
1) Why was the change made? It is apparently unique to the Tcl build. When I build a sqlite3 library by itself, it does not make these symbols private:
sqlite-autoconf-3180000$ nm ./.libs/libsqlite3.so.0.8.6 | grep sqlite3_exec
000000000007d1b0 T sqlite3_exec
2) Is there a simple way to revert the behavior so that these symbols are no longer made private?
3) Are other libraries affected in the same manner?