Building Extension on Linux fails with relocation error

Поиск
Список
Период
Сортировка
От Binaek Sarkar
Тема Building Extension on Linux fails with relocation error
Дата
Msg-id CAAi87c1LHt54DaOGpuAMW2cXygU63v6W2-kEq6OYGjfYnKLzkQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: Building Extension on Linux fails with relocation error
Список pgsql-general
I am new to PostgreSQL extension development and am currently working on the steampipe-postgres-fdw project. 

This is a Foreign Data Wrapper (FDW) written in Go, and while I have successfully built it on Darwin systems, I am facing challenges when building on Linux, particularly with pgxs.mk against PostgreSQL 14.

The issue arises with a Go module that is compiled into a .a archive file using -buildmode=c-archive, leading to a file size of approximately 393 MB. During the build process using pgxs.mk, I encounter several errors related to relocation and DWARF debug information, such as:

/usr/bin/ld: steampipe_postgres_fdw.a(go.o): relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `type:string' which may bind externally can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: DWARF error: line info data is bigger (0x65f0639) than the space remaining in the section (0xe86ef9)
...

The log is for aarch64 - but I am getting similar errors for amd64 as well

Interestingly, the build completes successfully when the .a file is smaller (around 100 MB).

As someone new to this area, I am a bit unclear on the following points:
  • Best practices for compiling Go code for PostgreSQL FDWs on Linux with pgxs.mk, especially regarding -fPIC and managing large archive file sizes.
  • Understanding and resolving the relocation and DWARF errors in the context of PostgreSQL extension development.
  • Any known issues or special considerations for building Go-based FDWs for PostgreSQL 14 on Linux.
Any advice, insights, or pointers to relevant resources from the community will be helpful.

Thank you for your time and assistance.

I am attaching a minimal piece of code to be able to reproduce - although the go toolchain is required

Best regards,
Binaek Sarkar
Вложения

В списке pgsql-general по дате отправления:

Предыдущее
От: Thomas Munro
Дата:
Сообщение: Re: How to generate random bigint
Следующее
От: Adrien Nayrat
Дата:
Сообщение: Re: "invalid contrecord" error on replica