First, let me assure you all I know nothing about the actual code that makes 
all this stuff work, or compiling, or really, much of anything "hard" about 
computing. So, this could be pure malarkey. Anyway...

There appears to be a linking problem when using libtdsodbc from DBD::ODBC 
which causes a segfault on a connect attempt. This is, I think, missed during 
routine testing because of PERL_DL_NONLAZY being set from Test::More.

However, using DBIx-Class, for example, the connect call is somehow deferred 
until the last possible minute, so this hack / workaround, of setting 
PERL_DL_NONLAZY in a BEGIN block no longer works. Well, I can say surely it 
doesn't work for me, really not exactly why that is.

Setting LD_BIND_NOW *does* work in this situation, however. But it has to be 
set outside the perl script.

This lead me to adding /usr/lib/libtdsodbc.so to /etc/ld.so.preload. Magically, 
all the segfault problems go away. But since this is only needed for DBD::ODBC, 
I think it's better to fix the problem there, or with unixODBC, which should 
successfully load libtdsodbc before it's needed, since it's linked to it. If 
that's, indeed, the problem...

I'm hoping that someone close to the code is interested enough to (help) pursue 
this with the respective maintainers of these ODBC driver/manager packages, or 
make some suggestions to the DBD::ODBC build script, to figure out why this is 
happening and maybe solve it. ;-)

For myself, I use Gentoo, so always assumed maybe some fault there, but this 
just happened with a RedHat user as well, who says, "This should probably be 
noted on the documentation pages since I assume anyone running a similar linux 
such as redhat 3 will experience the same issue."

So, I thought you folks should hear about it all again. HTH... else, sorry for 
the noise.

Cheers,

-- 
 |\  /|        |   |          ~ ~  
 | \/ |        |---|          `|` ?
 |    |ichael  |   |iggins    \^ /
 michael.higgins[at]evolone[dot]org

Reply via email to