Lazarus

Free Pascal => Windows => Topic started by: regs on August 29, 2016, 05:11:04 am

Title: Cross compilation libraries from Win32 to Linux
Post by: regs on August 29, 2016, 05:11:04 am
having error
C:\FPC\3.0.0\bin\i386-Win32\x86_64-linux-ld.exe: cannot find /lib64/ld-linux-x86-64.so.2

File is in folder with all other libraries. It's provided with -FI. Apps cross compiles well, but not libraries. Tried -Xd as suggested in some threads, but still same. Am I missing something?
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: Thaddy on August 29, 2016, 09:01:38 am
What you are missing is that for that platform the internal linker and assembler  will just work. Don't need to specify an internal linker or assembler.
What you DO have to do is maybe set some options that are linux specific. like maybe -fPIC and -Tlinux

If you want to use un external linker anyway, the options are -FL\path\to\the\linker\ld (capital L, not lowercase l, not -Fl) , use -XP<x> for the binutilsprefix and -FD<binutils path>
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: regs on August 29, 2016, 09:14:13 am
there is a full command line from project options. if i change library to program everything goes well.

Code: Pascal  [Select][+][-]
  1.  -Tlinux -Px86_64 -MObjFPC -Scghi -Cg -O1 -Xs -l -vewnhibq -Fis:\libtest\lib\linux-x86_64-gtk2
  2. -Flc:\fpc\3.0.0\libraries\linux\x86_64 -FuC:\lazarus-trunk\lcl\units\x86_64-linux\gtk2 -FuC:\lazarus-trunk\lcl\units\x86_64-linux
  3. -FuC:\lazarus-trunk\components\lazutils\lib\x86_64-linux -FuC:\lazarus-trunk\packager\units\x86_64-linux
  4. -Fus:\libtest\ -FUs:\libtest\lib\linux-x86_64-gtk2\ -FEs:\libtest\bin\ -olibtest.so -dLCL -dLCLgtk2




edit: this indeed did it
-FLc:\fpc\3.0.0\libraries\linux\x86_64\ld-linux-x86-64.so.2
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: Fr0sT-Brutal on July 15, 2020, 09:21:08 am
edit: this indeed did it
-FLc:\fpc\3.0.0\libraries\linux\x86_64\ld-linux-x86-64.so.2
Thanks man! You saved me from several hours of frustrating searches in the state of furious rage. >:(
I just wonder why the hell it was so complex to find, how the "Use <x> as dynamic linker" is related to "cannot find shared library" error and where this option in Lazarus? Had to add "-FL$(LazarusDir)\..\FPC\lib\$(TargetCPU)-$(TargetOS)\ld-linux.so.2" to Project options => Compiler options => Custom options
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: PascalDragon on July 15, 2020, 09:34:25 am
What you are missing is that for that platform the internal linker and assembler  will just work. Don't need to specify an internal linker or assembler.
What you DO have to do is maybe set some options that are linux specific. like maybe -fPIC and -Tlinux

If you want to use un external linker anyway, the options are -FL\path\to\the\linker\ld (capital L, not lowercase l, not -Fl) , use -XP<x> for the binutilsprefix and -FD<binutils path>

Thaddy, that is nonsense. The internal/external linker stuff is about the static linker that the compiler uses to generate the binary. The dynamic linker is what is used by Linux when the executable is run to load libraries it is depending on. Your suggestion to pass a full Windows path using -FL is wrong and will lead to the generated binary not working on Linux if it requires external libraries. Instead the path to the root needs to be supplied using -XR\path\to\root\of\linux\binaries and the dynamic linker (ld-linux-x86-64.so.2) needs to reside in the same subdirectory that it will reside on the Linux system as well (e.g. lib\).
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: Thaddy on July 15, 2020, 10:19:18 am
What you are missing is that for that platform the internal linker and assembler  will just work. Don't need to specify an internal linker or assembler.
What you DO have to do is maybe set some options that are linux specific. like maybe -fPIC and -Tlinux

If you want to use un external linker anyway, the options are -FL\path\to\the\linker\ld (capital L, not lowercase l, not -Fl) , use -XP<x> for the binutilsprefix and -FD<binutils path>
I never wrote that. I will change my passwords.
(can be checked by ip)
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: theo on July 15, 2020, 12:56:38 pm
I never wrote that. I will change my passwords.

This post is 4 years old.
Why should someone hack your account to write this?
Title: Re: Cross compilation libraries from Win32 to Linux
Post by: marcov on July 15, 2020, 01:13:00 pm
Moreover, there is no internal linker enabled for 64-bit Linux, even if it weren't.
TinyPortal © 2005-2018