Reason for linking against both libldap and libldap_r #13

jeremyevans opened this Issue Apr 4, 2012 · 2 comments

3 participants


In the extconf.rb file, for OpenLDAP2, ruby-ldap attempts to link to both libldap and libldap_r:

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/ /usr/local/lib/ : 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

@fmbiete fmbiete added a commit to fmbiete/ruby-ldap that referenced this issue Jan 19, 2014
@fmbiete fmbiete Link against libldap_r only - Issue #13 e6728c3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment