title: Undefined symbol when trying to load a library with dlopen
body: <p>I'm trying to load a shared library (plugin) I was provided (closed source) with dlopen under a Linux ARM platform. I'm trying to load this way:</p>
  
  <pre><code>void* handle = dlopen(&lt;library_path&gt;/&lt;library_name&gt;, RTLD_NOW);
  </code></pre>
  
  <p>The result is a failure with this message:</p>
  
  <pre><code>Failed to load &lt;library_path&gt;/&lt;library_name&gt;: undefined symbol: &lt;symbol_name&gt;.
  </code></pre>
  
  <p>I tried to look inside the library with nm, but it seems the lib was stripped, no symbol could be found. I also tried using readelf -s, and, in fact, I got this result:</p>
  
  <pre><code>12663: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND &lt;symbol_name&gt;
  </code></pre>
  
  <p>By reading around, I get that readelf -s returns all the symbols, including those symbols  defined in libraries referenced by it.</p>
  
  <p>The answers to <a href="https://stackoverflow.com/questions/34732/how-do-i-list-the-symbols-in-a-so-file">this</a> question are not completely clear to me: is this a symbol which is supposed to be in the library and which is not there because it was compiled the wrong way or is this a symbol I'm supposed find somewhere else? The output of readelf -d seems to suggest I'm providing all the needed shared libraries. May this error be related to a mistake in the way I'm compiling my executable or is this something not related to the loader?</p>
  
  <p>Also, I read about the meaning of each column, but those values are quite strange. How do you interpret that symbol description? Why is address 0? Why is type NOTYPE?</p>