Tom

Would this be an acceptable patch?

Subject: [PATCH] Fix static build
---
Index: src/Makefile.shlib
<+>UTF-8
===================================================================
diff --git a/src/Makefile.shlib b/src/Makefile.shlib
--- a/src/Makefile.shlib (revision fd64ed60b62697984bb69a09a3ae19fbe2905eb6)
+++ b/src/Makefile.shlib (date 1728590127913)
@@ -354,7 +354,7 @@
 # those that point inside the build or source tree.  Use sort to
 # remove duplicates.  Also record the -l flags necessary for static
 # linking, but not those already covered by Requires.private.
- echo 'Libs.private: $(sort $(filter-out -L.% -L$(top_srcdir)/%,$(filter
-L%,$(LDFLAGS) $(SHLIB_LINK)))) $(filter-out
$(PKG_CONFIG_REQUIRES_PRIVATE:lib%=-l%),$(filter
-l%,$(SHLIB_LINK_INTERNAL:%_shlib=%) $(SHLIB_LINK)))' >>$@
+ echo 'Libs.private: $(sort $(filter-out -L.% -L$(top_srcdir)/%,$(filter
-L%,$(LDFLAGS) $(SHLIB_LINK)))) $(filter-out
$(PKG_CONFIG_REQUIRES_PRIVATE:lib%=-l%),$(filter -l%,$(SHLIB_LINK_INTERNAL)
$(SHLIB_LINK)))' >>$@


 ##

Br Mikael

On Thu, Oct 10, 2024 at 9:08 PM Mikael Sand <ms...@seaber.io> wrote:

> Aleksander, do you have something against static linking or am I reading
> you wrong?
> I've seen this sentiment in several places but never understood why anyone
> would hold this position. Could you elaborate?
>
> At least for executables intended to be run in production inside
> containers, they usually run in isolation, what other executables could
> they share libraries with?
> Should we leave performance on the table, given the energy and resource
> requirements it implies?
>
> Certainly, for libraries intended to be distributed in e.g. Linux
> distributions and be depended on in end-user executables, it makes sense to
> have shared libraries and simplify mitigating security issues.
>
> It appears to me that there are many cases where static linking and link
> time optimization would be more appropriate than dynamic.
> When the executables never have a chance to share libraries with any other
> process and are rebuilt whenever a new version is deployed what benefits
> does dynamic linking provide over static + lto?
>
> I expect I'm missing something crucial, but I have spent some time trying
> to understand this issue deeper, and still find myself mystified.
> Please enlighten me.
>
> Br Mikael
>
> On Thu, Oct 10, 2024 at 8:29 PM Mikael Sand <ms...@seaber.io> wrote:
>
>> Just for reference in case anyone else who utilizes static linking for
>> any reason hits upon this issue, here is a working Dockerfile for libpq /
>> postgresql 17
>>
>> FROM postgres:17.0-alpine3.20 AS builder
>> USER root
>> WORKDIR /app
>> RUN apk update && apk add --no-cache --update-cache \
>>     openssl-libs-static \
>>     libevent-static \
>>     libxml2-static \
>>     libedit-static \
>>     libxslt-static \
>>     sqlite-static \
>>     openldap-dev \
>>     libxslt-dev \
>>     libxml2-dev \
>>     libedit-dev \
>>     openssl-dev \
>>     zstd-static \
>>     zlib-static \
>>     lz4-static \
>>     e2fsprogs \
>>     keyutils \
>>     zstd-dev \
>>     zlib-dev \
>>     gdbm-dev \
>>     clang17 \
>>     lz4-dev \
>>     libldap \
>>     bison \
>>     curl \
>>     perl \
>>     make
>>
>> COPY <<EOF ./main.cpp
>> #include<libpq-fe.h>
>> int main(){return PQconnectdb("")==NULL;}
>> EOF
>>
>> ARG KRB5=1.21.3
>> ARG KRB5MAJMIN=1.21
>> RUN curl -L https://kerberos.org/dist/krb5/$KRB5MAJMIN/krb5-$KRB5.tar.gz | 
>> tar xzf -
>> RUN cd krb5-$KRB5/src && \
>>     ./configure && make && make install && \
>>     ./configure --disable-shared --enable-static && make && make install
>>
>> ARG SASL=2.1.28
>> RUN curl -L 
>> https://github.com/cyrusimap/cyrus-sasl/releases/download/cyrus-sasl-$SASL/cyrus-sasl-$SASL.tar.gz
>>  | tar xzf -
>> RUN cd cyrus-sasl-$SASL && ./configure --enable-static && make && make 
>> install
>>
>> RUN clang++ -static -o main main.cpp \
>>     -L/usr/local/lib -lpq -lpgcommon_shlib -lpgport_shlib \
>>     -lldap -lsasl2 -lssl -lcrypto -llber \
>>     -lgssapi_krb5 \
>>     -lkrb5 -lk5crypto -lcom_err -lkrb5support \
>>     -lgdbm
>>
>>

Reply via email to