I ma pretty sure that 1.6 and 1.8 behave the same way when one loads a .so when in a module context. It's just that 1.8 no longer has the code that satisfies a require by loading a .so.
So the export statements that David posted from debian look fine to me, and the least confusing way to do things. define-public isn't right, because the symbol is defined after loading the .so, just not exported.