Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-26 Thread John Escott
 Martin J. Evans wrote:
  col wrote:

[8]

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

 
 I spoke to Nick and he reminded me why this can happen.

Thanks *very* much for that.
 
 See
 http://www.easysoft.com/support/kb/kb00664.html
 
http://groups.google.com/group/perl.dbi.users/browse_thread/thread/995131d999ca388/370b10f358e31729?hl=enlnk=gstq=Segmentation+fault+on+RHEL4#370b10f358e31729


And thanks for the links. I had already run across this and attempted to 
rebuild unixODBC --enable-rtldgroup=no to no apparent effect. I'll try 
again.

 
 It is probably down to using RTLD_GLOBAL on the dlopen call which
 causes symbols to be resolved top down instead of from where the
 symbol was found to be undefined downwards. You can stick with what
 you are doing or rebuild unixODBC but it seems a permanent change to
 unixODBC is not possible because the problem is in libtool so every
 time unixODBC is reconfigured libtool replaces the change to remove
 RTLD_GROUP.

./configure --prefix=/usr --host=i686-pc-linux-gnu 
--mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share 
--sysconfdir=/etc --localstatedir=/var/lib --host=i686-pc-linux-gnu 
--prefix=/usr --sysconfdir=/etc/unixODBC --libdir=/usr/lib 
--enable-static --enable-rtldgroup=no --enable-fdb 
--build=i686-pc-linux-gnu

... checking Have we enabled using RTLD_GROUP ... no 

[...]

No change:

perl dbix_odbctest.pl 
Segmentation fault

We had a similar problem a while ago with RHEL3 which was solved by 
installing the latest unixODBC (2.2.14) -- but without disabling 
RTLD_GROUP. (Actually, the problem was slightly different in that the 
DBI-connect failed rather than segfaulting, but maybe that was due to 
version differences in other software).
We found Martin's reply to 
http://www.issociate.de/board/goto/565693/DBD::ODBC,_unixODBC,_FreeTDS,_MS-SQL,_lazy_DL,_dbd_db_login/SQLSetConnectOption_err=-2.html
 
(the first reply in the same page) helpful, since unixODBC 2.2.8 is the 
default version in RHEL3 and a recent Fedora containing 2.2.11 worked 
correctly.

best regards, John Escott.



Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-26 Thread col
On Fri, 26 Jun 2009 08:44:28 +0200
John Escott j...@scanlaser.nl wrote:

 (the first reply in the same page) helpful, since unixODBC 2.2.8 is
 the default version in RHEL3 and a recent Fedora containing 2.2.11
 worked correctly.

John --

Thanks for your reply. Actually, the problem is consistent and appears only 
*after* unixODBC version 2.2.11 -- that is the very last version that works. 
All subsequent releases exhibit this segmentation fault failure.

So far nothing suggested to apply in the compile stage is fixing it.

The ld.so.preload hack is not a fix at all IMO, but I'm neither C programmer, 
nor distro packager. I just dislike ugly hacks and as a sysadmin, *really* 
wouldn't mind never thinking of this again.

Unfortunately, I'm just not in a position to figure it out. I've done my bit to 
complain and report on this since version 2.2.12 broke my system, all to no 
effect. Someone else has to want to fix this.

It was suggested that Debian actually has this working out of the box, but 
I'm guessing they have a ld.so.preload hack for it to work, or maybe they 
package an older version that still works, like 2.2.11 (I guess that's what you 
just wrote).

I suppose I could just go back to that version too, but 2.2.12 was out a long 
time ago and 2.2.14 is the latest. I mean, aren't we supposed to help fix bugs 
for new releases?

Anyway, the problem is known, the fix should be made available, but first, 
there has to be an acknowledgement of the problem by unixODBC folks, something 
I've yet to see... it's almost as if there was some *other way* to do this... 
*not* using FreeTDS. Otherwise, this would be a major problem with the package, 
and something necessitating a fix, no?

Anyway, I'm done ranting. Time for me to just accept defeat in this area and 
move on. Does anyone know, is there an open source replacement for unixODBC? 
Why do we need this thing anyway for DBD::ODBC? Shouldn't it work without it?

Cheers,

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


Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-26 Thread Martin Evans
col wrote:
 On Fri, 26 Jun 2009 08:44:28 +0200 John Escott j...@scanlaser.nl
 wrote:
 
 (the first reply in the same page) helpful, since unixODBC 2.2.8 is
  the default version in RHEL3 and a recent Fedora containing 2.2.11
  worked correctly.
 
 John --
 
 Thanks for your reply. Actually, the problem is consistent and
 appears only *after* unixODBC version 2.2.11 -- that is the very last
 version that works. All subsequent releases exhibit this segmentation
 fault failure.
 
 So far nothing suggested to apply in the compile stage is fixing it.

Can I just verify whether you have configured unixODBC then removed the
LT_GLOBAL from the dlopen call then configured again and ensured
LT_GLOBAL is in the dlopen call. One of those should fix it - I believe
it is the removing of LT_GLOBAL. One of the FAQs suggests LT_GROUP needs
removing but I thought it was LT_GROUP which needed to be in place.

The problem this addresses is dynamic resolution of symbols.
The perl runs and DBI loads ODBC.so which is linked to libodbc.so.
When you call DBI-connect, unixODBC will load the driver and locate the
symbols but once this has happened the next call to a SQLxxx ODBC fn
ends up directly in the ODBC driver instead of in unixODBC. As your
application had a connection handle given to it via unixODBC, the first
ODBC call after connect from the app/DBD::ODBC ends up in the SQLxxx fn
in the driver with a unixODBC handle instead of a driver handle then
when the driver attempts to use that pointer it can easily segfault
because it points at a structure it never created.

If this was your problem then you could identify it precisely by
enabling unixODBC logging and doing a simple connect (which segfaults) -
is there anything in the log? e.g., add the following to your
odbcinst.ini file:

[ODBC]
Trace   = yes
TraceFile   = /tmp/unixodbc.log

 The ld.so.preload hack is not a fix at all IMO, but I'm neither C
 programmer, nor distro packager. I just dislike ugly hacks and as a
 sysadmin, *really* wouldn't mind never thinking of this again.

From the above explanation you can maybe see how this fixes it. At this
stage you only have a few choices a) throw it all away and stop using it
b) use the ugly hack c) try more to get to the bottom of it. My guess
is you won't be doing (a) and will almost certainly do (b) until someone
sorts it out for you - but that will probably require more of (c).

 Unfortunately, I'm just not in a position to figure it out. I've done
 my bit to complain and report on this since version 2.2.12 broke my
 system, all to no effect. Someone else has to want to fix this.

The first problem here is we are not sure what problem you have - we can
only guess based on the ugly hack. The second problem
is other than John (who is working now) you are the only person with
this problem - I don't have it on Linux Ubuntu using either unixODBC and
freeTDS supplied by Ubuntu or when I build everything myself. Neither
does anyone else I know (and I know a lot (1000s) of people using unixODBC).

If we had access to the machine which is failing we might be able to
find out what is wrong but in the mean time we are still not 100% sure
what the problem is and we are not sure what exactly you have tried.

since version 2.2.12 broke my system, all to no effect. Someone else
has to want to fix this.

I don't want to get into an argument with you about this but I think
all to no effect is a little unfair. You got responses to your request
for help almost immediately, you say you have tried some and now just
want to give up and say it is someone else's problem. It is not my
problem or anyone elses - all the software you are using is free and
there is no obligation on anyone I know to help you but some are trying.
You also seem to have a workaround but you don't like it.

 It was suggested that Debian actually has this working out of the
 box, but I'm guessing they have a ld.so.preload hack for it to work,
 or maybe they package an older version that still works, like 2.2.11
 (I guess that's what you just wrote).

It works out of the box for me on ubuntu as well and also with the
latest of unixODBC and freeTDS built by hand and with preload untouched.

 I suppose I could just go back to that version too, but 2.2.12 was
 out a long time ago and 2.2.14 is the latest. I mean, aren't we
 supposed to help fix bugs for new releases?

I am not sure what you mean by that.

 Anyway, the problem is known, the fix should be made available, but
 first, there has to be an acknowledgement of the problem by unixODBC
 folks, something I've yet to see... it's almost as if there was some
 *other way* to do this... *not* using FreeTDS. Otherwise, this would
 be a major problem with the package, and something necessitating a
 fix, no?

A fix might be made available once someone has identified the problem -
that has not happened yet. I personally dislike your comments made at
people who wrote and maintain a large piece of software for 

Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-26 Thread col
On Fri, 26 Jun 2009 17:47:13 +0100
Martin Evans martin.ev...@easysoft.com wrote:

 col wrote:
  So far nothing suggested to apply in the compile stage is fixing it.
 
 Can I just verify whether you have configured unixODBC then removed
 the LT_GLOBAL from the dlopen call then configured again and ensured
 LT_GLOBAL is in the dlopen call. One of those should fix it - I
 believe it is the removing of LT_GLOBAL. One of the FAQs suggests
 LT_GROUP needs removing but I thought it was LT_GROUP which needed to
 be in place.

Okay, I'll try this again. I did remove a piece of some .c file...

 diff ./libltdl/ltdl.c ../ltdl.c.new 
1135c1135
   lt_module   module   = dlopen (filename, LT_GROUP | LT_LAZY_OR_NOW | 
LT_MEMBER );
---
   lt_module   module   = dlopen (filename, LT_LAZY_OR_NOW | LT_MEMBER );

I assume this is what you meant. So, I:

 ./configure --mandir=/usr/share/man --infodir=/usr/share/info 
--datadir=/usr/share --localstatedir=/var/lib --host=i686-pc-linux-gnu 
--prefix=/usr --sysconfdir=/etc/unixODBC --libdir=/usr/lib --enable-static 
--enable-rtldgroup=no --enable-fdb --disable-gui  --build=i686-pc-linux-gnu

Then: 

patch -p1 ../unix_odbc_lt-group.patch 
patching file libltdl/ltdl.c

make

make install (let me note that I haven't issued this command in a few years, so 
I'm going to assume this wound up in the right places, having cribbed the 
./configure from the Gentoo ebuilds.)

emerge DBD-ODBC (does this matter? IDK. Possibly.)

 
 The problem this addresses is dynamic resolution of symbols.

Eh? '-)

Unfortunately, I am wholly lost at this point. My purpose is to abstract it 
away with an ORM and get data flowing to eyes. ;-)

I truly do appreciate your explaining, though.

 
 If this was your problem then you could identify it precisely by
 enabling unixODBC logging and doing a simple connect (which
 segfaults) - is there anything in the log? e.g., add the following to
 your odbcinst.ini file:
 
 [ODBC]
 Trace   = yes
 TraceFile   = /tmp/unixodbc.log
 

Is all there, should write to my user Desktop... Never, ever seen an unixODBC 
trace file...ODBC_Trace??? Isn't that a configure option to build a library for 
that, or something? Maybe should be enabled? 

[8]

 
 If we had access to the machine which is failing we might be able to
 find out what is wrong but in the mean time we are still not 100% sure
 what the problem is and we are not sure what exactly you have tried.

Well, short of ditching the package manager and distro, I tried all the whining 
I could muster, I suppose.

Okay, building as you described does seem to work. Yeah! THANK YOU! (I knew you 
could do it.) 

Now, the problem -- for ME -- is, I'll be stuck having to make a new ebuild or 
pursue a bug for same (and I do really lack the relevant proficiencies), and 
what I'd like is to be out of it entirely and still see it fixed.

 since version 2.2.12 broke my system, all to no effect. Someone else
 has to want to fix this.
 
 I don't want to get into an argument with you about this but I think
 all to no effect is a little unfair. 

Whoa! I meant, I'm still getting a generic segfault. You've been very 
responsive every time, I know.

 You got responses to your
 request for help almost immediately, you say you have tried some and
 now just want to give up and say it is someone else's problem.

No, just that as I can't fix it, someone else has to -- or it won't be fixed! I 
suppose that's really not a problem, true.

 It is
 not my problem or anyone elses 

Agreed. '-)

[8]

 It works out of the box for me on ubuntu as well and also with the
 latest of unixODBC and freeTDS built by hand and with preload
 untouched.

Okay, maybe I can find out what they do... 

I looked at the Gentoo ebuild and they try to link to the system ltld, or 
whatever it is, nuking the whole folder from the unixODBC tarball. So, all this 
is irrelevant to the build system they have.

IDK why, can't speculate, but NOW, at least I can say there is *something* that 
could be done better. I hope it's to be a Gentoo dev's problem, now I have 
enough info to say something useful (perhaps) about it. 

Some days, I'm really thinking Gentoo is not good for my health, overall.

 
  I suppose I could just go back to that version too, but 2.2.12 was
  out a long time ago and 2.2.14 is the latest. I mean, aren't we
  supposed to help fix bugs for new releases?
 
 I am not sure what you mean by that.

Me neither, at this point. I guess I'm trying to find a way to get this problem 
resolved on the distro I use, so I can put on my webmonkey/perlscripter's hat 
and have some fun, without worrying that everything will break next week or 
month when I update all my systems.

 
  Anyway, the problem is known, the fix should be made available, but
  first, there has to be an acknowledgement of the problem by unixODBC
  folks, something I've yet to see... it's almost as if there was some
  *other way* to do this... *not* using FreeTDS. Otherwise, this 

Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-26 Thread col
On Thu, 25 Jun 2009 21:40:07 +0100
Martin J. Evans martin.ev...@easysoft.com wrote:

  
 I'm not sure the --enable-rtldgroup=no  works now because of libtool 
 changes. I think you may need to configure unixODBC then edit the
 file and delete the LT_GROUP. This appears to be an issue with
 libtool which was worked around in the past but the workaround does
 not work now because libtool has changed and regenerates the code in
 a way --enable-rtldgroup cannot work.
 
 Martin


Martin --

In:

unixODBC-2.2.14/libltdl/ltdl.c line 1063 of 4543 :

/*
 * This needed fixing for any number of reasons, including Perl DBD::ODBC
 */

... so, that comment line would seem to indicate that:

# Remove bundled libltdl copy
rm -rf libltdl

... from the unixODBC ebuild script I linked you to, is pretty much going to 
cause usage failure for DBD::ODBC, since it deletes the file which needed 
fixing for... DBD::ODBC.

So, like, is that about it? '-)

And, so even though that file was fixed for DBD::ODBC, it probably still needs 
fixing a bit more... as I just finished patching my copy of it at your 
suggestion?

Now, what I don't understand is, why this package *doesn't* use whatever... 
system libltdl. 

Again, all I can say is I know nothing about the actual code that makes all 
this stuff work, or compiling, or really, much of anything hard about 
computing. I just want Gentoo perl users (both of us) to be able to have an 
ebuild that works to make something DBD-ODBC can use.

Cheers,

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


Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-25 Thread Martin J. Evans
col wrote:
 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,
 

(reposted as I forgot dbi-users originally)

I'm sorry to hear you've had so much trouble with this and note you've
posted on the freeTDS list in the past week. Probably the best place for
this is on the unixODBC list.

I think your problem is down to deferred linking but if it was as simple
as that I would expect to have seen this before on the unixodbc or
freetds lists and I haven't until now.

  or with unixODBC, which should successfully load libtdsodbc before
it's needed, since it's linked to it

What you need to understand is that unixODBC is an ODBC Driver Manager
used to isolate the application from the ODBC Driver. The driver manager
does a whole lot more than simply load the driver - see any online docs.
unixODBC cannot load your driver until you call connect because until
you call connect it has no idea which driver you want to use - in fact
it is the same using DBI - until you call DBI's connect method it does
not know which DBD you are going to use. As a result, it is impossible
for DBI to load the DBD or for unixODBC to load freetds and they are NOT
directly linked at all. The only dependent linking is between
DBD::ODBC's ODBC.so and libodbc.so (the driver manager) which you can
see if you run ldd on ODBC.so. Similarly, if you run ldd on libodbc.so
you will see it is not (and cannot be) linked to any particular driver.

I suspect this may be down to how unixODBC was built (where did you get
yours from) as there are a plethora of arguments to dlopen which may
impact this. It could also be something to do with shared objects (e.g.,
freetds) attempting to register unload callbacks (or whatever they are
called these days).

I think you'd be better pursuing this on the unixodbc/freetds lists with
as much info as possible as it is quite possible Nick Gorham (of
unixODBC) will know the answer or be able to find one. freetds version,
unixodbc version, linux version, ldd and ld.so version, how unixodbc and
freetds were built, whether you are using selinux etc.

Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com


Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-25 Thread Martin Evans
Martin J. Evans wrote:
 col wrote:
 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,

 
 (reposted as I forgot dbi-users originally)
 
 I'm sorry to hear you've had so much trouble with this and note you've
 posted on the freeTDS list in the past week. Probably the best place for
 this is on the unixODBC list.
 
 I think your problem is down to deferred linking but if it was as simple
 as that I would expect to have seen this before on the unixodbc or
 freetds lists and I haven't until now.
 
   or with unixODBC, which should successfully load libtdsodbc before
 it's needed, since it's linked to it
 
 What you need to understand is that unixODBC is an ODBC Driver Manager
 used to isolate the application from the ODBC Driver. The driver manager
 does a whole lot more than simply load the driver - see any online docs.
 unixODBC cannot load your driver until you call connect because until
 you call connect it has no idea which driver you want to use - in fact
 it is the same using DBI - until you call DBI's connect method it does
 not know which DBD you are going to use. As a result, it is impossible
 for DBI to load the DBD or for unixODBC to load freetds and they are NOT
 directly linked at all. The only dependent linking is between
 DBD::ODBC's ODBC.so and libodbc.so (the driver manager) which you can
 see if you run ldd on ODBC.so. Similarly, if you run ldd on libodbc.so
 you will see it is not (and cannot be) linked to any particular driver.
 
 I suspect this may be down to how unixODBC was built (where did you get
 yours from) as there are a plethora of arguments to dlopen which may
 impact this. It could also be something to do with shared objects (e.g.,
 freetds) attempting to register unload callbacks (or whatever they are
 called these days).
 
 I think you'd be better pursuing this on the unixodbc/freetds lists with
 as much info as possible as it is quite possible Nick Gorham (of
 unixODBC) will know the answer or be able to find one. freetds version,
 unixodbc version, linux version, ldd and ld.so version, how unixodbc and
 freetds were built, whether you are using selinux etc.
 
 Martin
 --
 Martin J. Evans
 Easysoft Limited
 http://www.easysoft.com
 
 

I spoke to Nick and he reminded me why this can happen.

See
http://www.easysoft.com/support/kb/kb00664.html
http://groups.google.com/group/perl.dbi.users/browse_thread/thread/995131d999ca388/370b10f358e31729?hl=enlnk=gstq=Segmentation+fault+on+RHEL4#370b10f358e31729

It is probably down to using RTLD_GLOBAL on the dlopen call which causes
symbols to be resolved top down instead of from where the symbol was
found to be undefined downwards. You can stick with what you are doing
or rebuild unixODBC but it seems a permanent change to unixODBC is not
possible because the problem is in libtool so every time unixODBC is
reconfigured libtool replaces the change to remove RTLD_GROUP.

Martin
-- 
Martin J. Evans
Easysoft Limited
http://www.easysoft.com


Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-25 Thread col
On Thu, 25 Jun 2009 10:10:03 +0100
Martin Evans martin.ev...@easysoft.com wrote:

 Martin J. Evans wrote:
  col wrote:

[8]

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

 
 I spoke to Nick and he reminded me why this can happen.

Thanks *very* much for that.
 
 See
 http://www.easysoft.com/support/kb/kb00664.html
 http://groups.google.com/group/perl.dbi.users/browse_thread/thread/995131d999ca388/370b10f358e31729?hl=enlnk=gstq=Segmentation+fault+on+RHEL4#370b10f358e31729

And thanks for the links. I had already run across this and attempted to 
rebuild unixODBC --enable-rtldgroup=no to no apparent effect. I'll try again.

 
 It is probably down to using RTLD_GLOBAL on the dlopen call which
 causes symbols to be resolved top down instead of from where the
 symbol was found to be undefined downwards. You can stick with what
 you are doing or rebuild unixODBC but it seems a permanent change to
 unixODBC is not possible because the problem is in libtool so every
 time unixODBC is reconfigured libtool replaces the change to remove
 RTLD_GROUP.

./configure --prefix=/usr --host=i686-pc-linux-gnu --mandir=/usr/share/man 
--infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc 
--localstatedir=/var/lib --host=i686-pc-linux-gnu --prefix=/usr 
--sysconfdir=/etc/unixODBC --libdir=/usr/lib --enable-static 
--enable-rtldgroup=no --enable-fdb   --build=i686-pc-linux-gnu

... checking Have we enabled using RTLD_GROUP ... no 

[...]

No change:

perl dbix_odbctest.pl 
Segmentation fault

LD_BIND_NOW=1 perl dbix_odbctest.pl 
trex connected

Honestly, I'd already explored this option, or so I thought. 

This is the script used to make the unixODBC build:
http://bugs.gentoo.org/attachment.cgi?id=193101action=view

... which is possibly deficient in some way. IDK. I just added the rtld_group 
configure option, which does seem to be honoured when passed to ./configure. 
I'm lost, pretty much, at this point.

I'll bring my findings to the unixODBC folks as well.

Thanks for all your help with this!

Cheers,

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


Re: FreeTDS, unixODBC and DBD::ODBC

2009-06-25 Thread Martin J. Evans

col wrote:

On Thu, 25 Jun 2009 10:10:03 +0100
Martin Evans martin.ev...@easysoft.com wrote:

  

Martin J. Evans wrote:


col wrote:
  


[8]

  

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


[8]

  

I spoke to Nick and he reminded me why this can happen.



Thanks *very* much for that.
 
  

See
http://www.easysoft.com/support/kb/kb00664.html
http://groups.google.com/group/perl.dbi.users/browse_thread/thread/995131d999ca388/370b10f358e31729?hl=enlnk=gstq=Segmentation+fault+on+RHEL4#370b10f358e31729



And thanks for the links. I had already run across this and attempted to 
rebuild unixODBC --enable-rtldgroup=no to no apparent effect. I'll try again.

  

It is probably down to using RTLD_GLOBAL on the dlopen call which
causes symbols to be resolved top down instead of from where the
symbol was found to be undefined downwards. You can stick with what
you are doing or rebuild unixODBC but it seems a permanent change to
unixODBC is not possible because the problem is in libtool so every
time unixODBC is reconfigured libtool replaces the change to remove
RTLD_GROUP.



./configure --prefix=/usr --host=i686-pc-linux-gnu --mandir=/usr/share/man 
--infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc 
--localstatedir=/var/lib --host=i686-pc-linux-gnu --prefix=/usr 
--sysconfdir=/etc/unixODBC --libdir=/usr/lib --enable-static 
--enable-rtldgroup=no --enable-fdb   --build=i686-pc-linux-gnu

... checking Have we enabled using RTLD_GROUP ... no 


[...]

No change:

perl dbix_odbctest.pl 
Segmentation fault


LD_BIND_NOW=1 perl dbix_odbctest.pl 
trex connected


Honestly, I'd already explored this option, or so I thought. 


This is the script used to make the unixODBC build:
http://bugs.gentoo.org/attachment.cgi?id=193101action=view

... which is possibly deficient in some way. IDK. I just added the rtld_group 
configure option, which does seem to be honoured when passed to ./configure. 
I'm lost, pretty much, at this point.

I'll bring my findings to the unixODBC folks as well.

Thanks for all your help with this!

Cheers,

  
I'm not sure the --enable-rtldgroup=no  works now because of libtool 
changes. I think you may need to configure unixODBC then edit the file 
and delete the LT_GROUP. This appears to be an issue with libtool which 
was worked around in the past but the workaround does not work now 
because libtool has changed and regenerates the code in a way 
--enable-rtldgroup cannot work.


Martin