Jordon Bedwell wrote: > I was wondering if anybody could help me figure out a problem with > static compiling: The problem is that the archive library doesn't contain the same symbols as the shared library. I think that is probably a bug. But mostly for things like that the shared library is the best one to use since if a security vulnerability is found then updating the shared library fixes all uses of it. But at the low level detail the configure script creates the following test case. #include <gnutls/gnutls.h> #include <gnutls/x509.h> int main() { gnutls_x509_crt_sign2(0, 0, 0, 0, 0); return 0; } Then it tries compiling it. Here is an example. gcc -std=gnu99 -o conftest -g conftest.c -lgnutls That works. But when you add -static to the options: gcc -std=gnu99 -o conftest -g -static conftest.c -lgnutls /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/libgnutls.a(x509_write.o): In function `gnutls_x509_crt_set_serial': (.text+0x16): undefined reference to `asn1_write_value' /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/libgnutls.a(x509_write.o): In function `gnutls_x509_crt_set_key_purpose_oid': (.text+0x1a7): undefined reference to `asn1_create_element' ... and many, many more ... At one level it is because this is failing. > I can't for the life of me figure out what's going on. I don't usually > static compile but in this case I decided to try out the new PHP 5.3.3 > with CHROOT and CHDIR which requires me to static compile msmtp (or > sendmail but lets be realistic about a full static compile on an MTA for > a shared server) so that users don't have to rely solely on SMTP (we use > smart hosting with msmtp ~ which again is unrealistic for a shared > environment.) You do not need to statically compile msmtp (or sendmail). You just need to install the shared libraries in the chroot too. How are you setting up the chroot? Personally I like using debootstrap and setting up a chroot managed by dpkg and apt. In which case installing packages and dependencies is as easy as apt-get install msmtp Personally I always set up nullmailer in chroots and configure it to deliver to the localhost. Then the host's main MTA handles delivery normally. > My only other solution is to manually CHROOT the entire server, That didn't parse. Sorry. > however, I'm trying to avoid such a situation at this time since it > would just decrease my reasons to switch to 5.3.3 when 5.4 is right > around the corner. I recommend just setting up a chroot with debootstrap so that you can install packages and dependencies easily with apt. http://wiki.debian.org/Debootstrap I do this all of the time, including once for PHP4 to work with a close source proprietary library in one case. It was handed to me and I wrapped it into a chroot to keep it contained until I could make the entire thing go away. Bob
Attachment:
signature.asc
Description: Digital signature