In the extconf.rb file, for OpenLDAP2, ruby-ldap attempts to link to both libldap and libldap_r: https://github.com/alexey-chebotar/ruby-ldap/blob/master/extconf.rb#L189
This causes problems on OpenBSD, since both ldap and ldap_r may define the same symbols, but they may be defined differently. This causes the following warning message when ruby-ldap is loaded:
ruby18:/usr/local/lib/libldap_r.so.12.0: /usr/local/lib/libldap.so.12.0 : WARNING: symbol(ldap_int_global_options) size mismatch, relink your program
Installing the gem using either --without-libldap or --without-libldap_r fixes the problem. Is there a reason ruby-ldap attempts to load both ldap and ldap_r? If not, is there a preference for loading ldap or ldap_r? I maintain the ruby-ldap port for OpenBSD, and am leaning towards using --without-libldap_r, but would like to make sure that will not cause other problems.
@jeremyevans, please excuse me that response took so long, but I do not know the reason, and I still do not have good knowledge of C, but I keep hope to dig into this question as soon as possible.
ldap_r is the thread-safe version of the library. Both of them declare the same symbols, so you only need to link against one.
IMO linking against ldap_r only would be the best option:
Applications with multiple threads calling OpenLDAP need to use libldap_r,
even if they don't share LDAP connections; otherwise, resolver and certain
other calls made for independent LDAP connections will not be thread-safe
and may clobber global data owned by the system library.
An example would be a rails application using Puma or Passenger Enterprise
Link against libldap_r only - Issue #13