From: | Aleksander Alekseev <aleksander(at)timescale(dot)com> |
---|---|
To: | Mikael Sand <msand(at)seaber(dot)io> |
Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Build issue with postgresql 17 undefined reference to `pg_encoding_to_char' and `pg_char_to_encoding' |
Date: | 2024-10-10 11:51:05 |
Message-ID: | CAJ7c6TMbbJLcJiyvO8gVDhbRLVxOOUTLc7xbbpVqGtfrX638rA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi Mikael,
> This is for compiling a c++ application that uses libpq with the -static flag, the server compiles fine.
OK. I couldn't quite do this because the only Linux machine I have at
the moment runs Raspbian and there doesn't seem to be a static glibc
available for it. But here is how to achieve what you want *in
theory*.
First compile Postgres from the source code, for instance (change the
flags as needed, you probably want a release build):
```
# sudo apt install clang-16
# git clean -dfx
CFLAGS="-static" meson setup --buildtype debug -Dicu=disabled
-Dldap=disabled -Dreadline=disabled -Dzlib=disabled -Dlz4=disabled
-Dprefix=/home/eax/pginstall build
ninja -C build
```
I recommend using Meson and Ninja. Autotools and Make are still
supported but are slow and probably will be gone in a few years. The
"ninja -C build" steps fail for me with various errors about the need
for static glibc but I think it should work on other distributions and
architectures.
Next install Postgres. I use a script for this [1]:
```
~/pgscripts/single-install-meson.sh
```
Change the script as needed - you probably don't need pg_ctl,
createdb, etc for your task.
Now in order to compile and execute your C++ program:
```
export PRFX=/home/eax/pginstall
g++ -g -Wall -o test_libpq -I$PRFX/include
-L$PRFX/lib/aarch64-linux-gnu/ test_libpq.cpp -lpq -static
LD_LIBRARY_PATH=$PRFX/lib/aarch64-linux-gnu/ ./test_libpq
```
This being said I don't recall seeing anything about the support of
static linking of libpq in the documentation [2]. To my knowledge this
is not officially supported / tested / maintained which means you and
your colleagues are on your own with the -static flag. Since you are
already using Docker, perhaps the easiest thing to do would be to back
the application and all its dependencies (dynamically linked) in a
Docker container.
Good luck.
[1]: https://github.com/afiskon/pgscripts/
[2]: https://www.postgresql.org/docs/current/libpq.html
--
Best regards,
Aleksander Alekseev
From | Date | Subject | |
---|---|---|---|
Next Message | Hayato Kuroda (Fujitsu) | 2024-10-10 12:02:17 | RE: incorrect wal removal due to max_slot_wal_keep_size |
Previous Message | Ebru Aydin Gol | 2024-10-10 11:20:14 | Re: RFC: Additional Directory for Extensions |