Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2024-02

Can FPC link a program with static (.a) libraries on Windows

3 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Tony Whyman

I have a Pascal program, compiled with FPC 3.2.2 and which appears to happily link and run with a static library compiled with gcc and having a ".a" prefix on linux. The functions in the static library and declared as external functions using the "external <libname> name <function name>" directive. The "".a" library is copied to the same directory as the program unit before compiling and linking.

However, compiling the same program on Windows always seems to result in the loader complaining that the corresponding <libname>.dll is not present, indicating that instead of linking with the static library, the program is attempting to "statically" load the correspoinding dll at initialisation time.

I have tried to force it to link with the static library (e.g. using the -Xt command line switch) but no luck.

Hence the question, does FPC 3.2.2 support linking with static libraries on windows?

Reply by email

Sven Barth
to Tony Whyman

Tony Whyman via fpc-pascal schrieb am
Sa., 17. Feb. 2024, 00:50:

Show quoted text 19 lines
I have a Pascal program, compiled with FPC 3.2.2 and which appears to happily link and run with a static library compiled with gcc and having a ".a" prefix on linux. The functions in the static library and declared as external functions using the "external <libname> name <function name>" directive. The "".a" library is copied to the same directory as the program unit before compiling and linking. However, compiling the same program on Windows always seems to result in the loader complaining that the corresponding <libname>.dll is not present, indicating that instead of linking with the static library, the program is attempting to "statically" load the correspoinding dll at initialisation time. I have tried to force it to link with the static library (e.g. using the -Xt command line switch) but no luck. Hence the question, does FPC 3.2.2 support linking with static libraries on windows?

"external <libname> name <funcname>" is for dynamic linking. For static linking you need to leave out the <libname> and instead use "{$linklib <libname>}" or even "{$linklib <libname>, static}" . That will also work on Linux.

Regards,
Sven

Reply by email

tony.whyman
to Sven Barth

Thanks. Easy to forget that there are 3 ways to link to external libraries.  -------- Original message --------From: Sven Barth via fpc-pascal Date: 17/02/2024 00:29 (GMT+00:00) To: FPC-Pascal users discussions Cc: Sven Barth Subject: Re: [fpc-pascal] Can FPC link a program with static (.a) libraries on Windows Tony Whyman via fpc-pascal schrieb am Sa., 17. Feb. 2024, 00:50:I have a Pascal program, compiled with FPC 3.2.2 and which appears to happily link and run with a static library compiled with gcc and having a ".a" prefix on linux. The functions in the static library and declared as external functions using the "external <libname> name <function name>" directive. The "".a" library is copied to the same directory as the program unit before compiling and linking.

However, compiling the same program on Windows always seems to result in the loader complaining that the corresponding <libname>.dll is not present, indicating that instead of linking with the static library, the program is attempting to "statically" load the correspoinding dll at initialisation time.

I have tried to force it to link with the static library (e.g. using the -Xt command line switch) but no luck.

Hence the question, does FPC 3.2.2 support linking with static libraries on windows?"external <libname> name <funcname>" is for dynamic linking. For static linking you need to leave out the <libname> and instead use "{$linklib <libname>}" or even "{$linklib <libname>, static}" . That will also work on Linux. Regards, Sven 

Reply by email