Hi Jason,

some general things about linking:

- The symbolic link(s) libcrypto.so pointing to libcrypto.so.0.9.8
  are only needed during BUILD time. On a host where no compiling
  happens the symbolic links are not required.

- While linking the application, the linker opens the library
  libcrypto.so.0.9.8 by accessing the symbolic link
  libcrypto.so and reads its SONAME:
    $ objdump -x /usr/lib/libcrypto.so | grep SONAME
  This name (which has no path) is added to your application:
    $ objdump -x /usr/bin/openssl | grep NEEDED

- When executing the application, the /lib/ld-linux.so link helper
  searches in the well known places $LD_LIBRARY_PATH:/lib:/usr/lib
  for the libraries and opens them recursively.
  To show which library file is actually used during execution, call:
    $ ldd /usr/bin/openssl


To solve your problem, I suggest to compile but not install "openssl-1.0.1c"
on the second machine and only copy the resulting libraries "libssl.so.1.0.0"
and "libcrypto.so.1.0.0" to /usr/lib without touching their names, the symlinks
nor the include/openssl.

This way, any application compiled on that host will link to 0.9.8,
while applications compiled against 1.0.x will also run smoothly.

HTH

        Christian


On Wed, Jun 20, 2012 at 05:56:07PM +0000, Jason Schultz wrote:
> 
> 
> 
> 
> I'm building and running an application that uses OpenSSL on SUSE Linux.  I 
> don't know a lot about linking in general, just very basic stuff, so my 
> question might be better posed to a Linux forum, but it might be specific to 
> OpenSSL.  Let me describe the scenario.
>  
> I have built installed OpenSSL 1.0.1c on one machine; built as a shared 
> library(with "shared" option on ./config).  I build my application and run it 
> on this machine, dynamically linking OpenSSL.  After some trial and error(to 
> get the application to use the new OpenSSL instead of the the previous 
> install of 0.9.8r), everything works fine, my application is using OpenSSL 
> 1.0.1c. Now, let's say I want to run my application on another SUSE Linux 
> machine.  However, this machine has 0.9.8r(or any 0.9.8 level) installed.  
> When I try to run the application, I get an error saying it can't find 
> OpenSSL 1.0.0.  I know that there are symbolic links set up when installing 
> OpenSSL, so libssl.so will be linked to libssl.so.1.0.0 after installing 
> OpenSSL 1.0.1c. (Similar for libcrypto.so) But in the old branch, the link is 
> set up with libssl.so pointing to libssl.so.0.9.8.  When I build my 
> application, it seems to know that it's looking for libssl.so.1.0.0, instead 
> of just the generic libssl.so.  I'm basing this on doing a readelf -d on my 
> the .so file my make produces, and seeing the following line:  (NEEDED)       
>       Shared library: [libssl.so.1.0.0]
> On the machine I moved my application to(with the older OpenSSL), the link 
> where OpenSSL exists shows libssl.so linked to libssl.so.0.9.8, obviously. I 
> started messing around with trying to build 1.0.1c to "look like" 0.9.8 by 
> changing the SHLIB_VERSION_NUMBER in Makefile.org and /crypto/opensslv.h, but 
> that started getting confusing and is probably beyond the scope of my 
> knowledge at this point. I've done it before with, for example, going from 
> 0.9.8i to 0.9.8r and didn't have any problems.  I suppose because the 
> symbolic links look the same. Has anyone had to do this before?  A point in 
> the right direction would be appreciated.  Is this even possible to go 
> between branches like that?  
>                                         
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to