On Mon, Sep 02, 2013 at 06:45:54PM +1000, Tim Serong wrote: > Hi All, > > I'm working on a build of csync2 2.0 for openSUSE, and have run into an > entertaining problem. Rather than linking against the relevant database > client libraries, it uses dlopen() at runtime. But it's dlopen()ing the > unversioned library, i.e.: > > db_mysql.c: dl_handle = dlopen("libmysqlclient.so", RTLD_LAZY); > db_postgres.c: dl_handle = dlopen("libpq.so", RTLD_LAZY); > db_sqlite.c: dl_handle = dlopen("libsqlite3.so", RTLD_LAZY); > db_sqlite2.c: dl_handle = dlopen("libsqlite.so", RTLD_LAZY); > > This is a problem for two reasons, one being that it means the -devel > packages need to be installed at runtime or those .so symlinks don't > exist. The other problem is that IMO it's just a bad idea to dlopen() > an unversioned library (potential runtime ABI breakage). > > Now, in the sqlite2 case, there's actually some fallback code, where if > it can't dlopen("libsqlite.so") it tries to dlopen("libsqlite.so.0"). > > Personally I'd be in favour of ditching this fallback code and just > changing all the above to: > > db_mysql.c: dl_handle = dlopen("libmysqlclient.so.18", RTLD_LAZY); > db_postgres.c: dl_handle = dlopen("libpq.so.5", RTLD_LAZY); > db_sqlite.c: dl_handle = dlopen("libsqlite3.so.0", RTLD_LAZY); > db_sqlite2.c: dl_handle = dlopen("libsqlite.so.0", RTLD_LAZY);
Ok. Thank you for the other patches as well. Did you hit any other issues, need to carry other patches? > But... Does anyone know how stable are the 18 and the 5 are on > libmysqlcient and libpq? They're fine for current releases of openSUSE, > but I don't want to be submitting patches upstream that are going to > break builds on other distros/versions. > > Does anyone know some autofoo to pull the correct versioned soname in at > build time? -- : Lars Ellenberg : LINBIT | Your Way to High Availability : DRBD/HA support and consulting http://www.linbit.com DRBD® and LINBIT® are registered trademarks of LINBIT, Austria. _______________________________________________ Csync2 mailing list Csync2@lists.linbit.com http://lists.linbit.com/mailman/listinfo/csync2