I'm compiling OpenSSL myself and am attempting to use that in my application.
I've created a LWP test script: use LWP::UserAgent 6; use Net::HTTPS; use File::Spec; use Archive::Zip; my $ua = LWP::UserAgent->new(); # If we're in the PAR'd case, we need to do a few extra things to setup the # cacert.pem file access. Otherwise, we rely on cacert.pem being in the # existing PERL5LIB (wherever that may be). if ( exists $ENV{PAR_TEMP} ) { print "PAR bootstrap root folder: $ENV{PAR_TEMP}\n\n"; # We expect the cacert.pem to be in $ENV{PAR_TEMP}/inc/cacert.pem my $ca_file = File::Spec->catfile( $ENV{PAR_TEMP}, 'inc', 'cacert.pem' ); # If PAR_GLOBAL_CLEAN is true, we'll need to extract the file # If PAR_GLOBAL_CLEAN is false (or if it's executed as parl PROG.par), # the cacert file should already exist in PAR_TEMP, so don't extract it again: if ( ! -f $ca_file ) { print "Extracting $ca_file\n"; my $zip = $PAR::LibCache{$ENV{PAR_PROGNAME}}; $zip->extractMember( 'cacert.pem', $ca_file ); } if ( -f $ca_file ) { print "CA Cert file location: $ca_file\n\n"; } $ua->ssl_opts( SSL_ca_file => $ca_file ); } my $result = $ua->get("https://google.com"); if ( $result->is_success ) { print $result->content; } else { print "ERROR: " . $result->status_line . "\n"; } Everything works well on most platforms, but I've got a problem specifically with FreeBSD where the packed shared libs are not found, presumably because the par-temp is never accessed. FreeBSD: $ lwp_test Can't load '/var/tmp/par-726f6f74/temp-86696/Rtl6JMPnvc.so' for module Net::SSLeay: Shared object "libssl.so.1.0.0" not found, required by "Rtl6JMPnvc.so" at /path/to/perl_base/lib/5.14.2/i386-freebsd-thread-multi/DynaLoader.pm line 190. at /path/to/local/perl5lib/lib/perl5/PAR/Heavy.pm line 75 Compilation failed in require at IO/Socket/SSL.pm line 18. BEGIN failed--compilation aborted at IO/Socket/SSL.pm line 18. Compilation failed in require at Net/HTTPS.pm line 26. Can't locate Net/SSL.pm in @INC (@INC contains: CODE(0x8ac5b60) CODE(0x8855fb0) CODE(0x88652d0)) at Net/HTTPS.pm line 30. Compilation failed in require at script/lwp_test.pl line 6. BEGIN failed--compilation aborted at script/lwp_test.pl line 6. >From a truss output, I never see anything other than system library paths being accessed: access("/usr/lib/libssl.so.1.0.0",0) ERR#2 'No such file or directory' access("/usr/lib32/libssl.so.1.0.0",0) ERR#2 'No such file or directory' access("/usr/local/lib32/compat/libssl.so.1.0.0",0) ERR#2 'No such file or directory' access("/lib32/libssl.so.1.0.0",0) ERR#2 'No such file or directory' access("/usr/lib32/libssl.so.1.0.0",0) ERR#2 'No such file or directory' Compare this to RHEL, which succeeds: open("/usr/lib/tls/x86_64/libssl.so.1.0.0", O_RDONLY) = -1 ENOENT (No such file or directory) stat("/usr/lib/tls/x86_64", 0x7fff68b231d0) = -1 ENOENT (No such file or directory) open("/usr/lib/tls/libssl.so.1.0.0", O_RDONLY) = -1 ENOENT (No such file or directory) stat("/usr/lib/tls", 0x7fff68b231d0) = -1 ENOENT (No such file or directory) open("/usr/lib/x86_64/libssl.so.1.0.0", O_RDONLY) = -1 ENOENT (No such file or directory) stat("/usr/lib/x86_64", 0x7fff68b231d0) = -1 ENOENT (No such file or directory) open("/usr/lib/libssl.so.1.0.0", O_RDONLY) = -1 ENOENT (No such file or directory) stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=126976, ...}) = 0 open("/tmp/par-74686f6b65/temp-25615/libssl.so.1.0.0", O_RDONLY) = 7 read(7, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@j\1\0\0\0\0\0"..., 832) = 832 fstat(7, {st_mode=S_IFREG|0555, st_size=455094, ...}) = 0 mmap(NULL, 2501864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 7, 0) = 0x2b6a62837000 I'm packaging in this form: pp -C -c -x -l ${libcrypto_lib} -l ${libssl_lib} -a ${cacert_file};cacert.pem -o lwp_test lwp_test.pl Where: libcrypto_lib=/path/to/libcrypto libssl_lib=/path/to/libssl cacert_file=/path/to/local/perl5lib/lib/perl5/Mozilla/CA/cacert.pem What's going on with FreeBSD compared to others? Is there some magic I can invoke to control the shared library path loading order and locations? A couple more tidbits of information: Perl 5.14.2 PAR 1.005 PAR::Packer 1.013 libcrypto/libssl are packed with pp: $ unzip -l lwp_test |egrep "ssl|crypto" 1582965 07-03-12 08:51 shlib/i386-freebsd-thread-multi/libcrypto.so.1.0.0 368693 07-03-12 08:51 shlib/i386-freebsd-thread-multi/libssl.so.1.0.0 libcrypto/libssl are extracted from the package (from PAR_GLOBAL_DEBUG=1 on a different execution from above): Extracting "shlib/i386-freebsd-thread-multi/libcrypto.so.1.0.0" to "/var/tmp/par-726f6f74/temp-86899/libcrypto.so.1.0.0" Extracting "shlib/i386-freebsd-thread-multi/libssl.so.1.0.0" to "/var/tmp/par-726f6f74/temp-86899/libssl.so.1.0.0" Thanks -Tim