Recent

Author Topic: Problem with Lazarus on RPi3b+ running Lubuntu 16.04  (Read 1675 times)

Curt Carpenter

  • Sr. Member
  • ****
  • Posts: 396
Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« on: October 20, 2019, 06:31:57 am »
I have installed Lazarus 1.6 on my RPi3b+, and it seems to be working.
I've been trying to move a Lazarus application to the RPi.  It uses the libusb library which is loaded into a pascal wrapper unit with {LINKLIB usb} command.
This program works on my i386 Linux Ubuntu system, but when I try to compile it on the RPi I get the following message:

"usr/bin/ld.bfd: cannont find /lib/i386-linux-gnu/libusb-0.1.so.4.4.4"

I don't understand this since the directory it should be looking in is /lib/arm-linux-gnueabifh, with nothing to do with i386.

Any hints would be most welcome! 


 

trev

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 2020
  • Former Delphi 1-7, 10.2 user
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #1 on: October 20, 2019, 06:44:47 am »
Have you changed the Config and Target compiler options in the Project settings?

Curt Carpenter

  • Sr. Member
  • ****
  • Posts: 396
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #2 on: October 20, 2019, 05:02:49 pm »
Thanks for the reply.

Yes I've tried changing the project options, but haven't found any way to remove the "1386" element from the error message.  Lazarus seems to think that I'm compiling on a 386 box still, not a RPi.

howardpc

  • Hero Member
  • *****
  • Posts: 4144
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #3 on: October 20, 2019, 05:39:09 pm »
Perhaps your app is using a package which has some hard-coded path(s) in its options?

Thaddy

  • Hero Member
  • *****
  • Posts: 14197
  • Probably until I exterminate Putin.
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #4 on: October 20, 2019, 06:01:16 pm »
Better to compile on the Raspberry Pi itself (as long as you extend the swap file that works. even fast)
Cross compilation relies on so many things.
I can give you my configuration for win64-x86_64 to arm-linux-eabihf if you want. But that does not rely on external code like your libusb.
My advice is to simply compile native on the Raspberry Pi itself.
Specialize a type, not a var.

Curt Carpenter

  • Sr. Member
  • ****
  • Posts: 396
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #5 on: October 20, 2019, 07:06:03 pm »
Thanks for the input.

I'm not trying to cross-compile, and am in fact compiling my program on the RPi3b+, Lazarus 1.6. 

Lazarus on the RPi in general seems to be working fine.  Just the library problem.

My program compiles and runs on my linux PC, but can't get it to compile on the RPi due to the error.


Thaddy

  • Hero Member
  • *****
  • Posts: 14197
  • Probably until I exterminate Putin.
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #6 on: October 20, 2019, 07:09:44 pm »
try
sudo apt-get install libusb-dev
Specialize a type, not a var.

Curt Carpenter

  • Sr. Member
  • ****
  • Posts: 396
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #7 on: October 20, 2019, 07:13:39 pm »
My program consists of only three units, and I sure can't see anything that indicates I may have a hard-coded path.

The unit causing the problem starts like this:

Unit libusb;
Interface

{$LINKLIB c}
{$LINKLIB usb}

I'll try installing libusb-dev.  Thanks again for the inputs.

...

Interestingly, libc appears to load with not problem.

Curt Carpenter

  • Sr. Member
  • ****
  • Posts: 396
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #8 on: October 20, 2019, 07:28:56 pm »
Thank you Thaddy.  The program compiles now, but I get an External:SIGSEGV error. 

I can work on that!

So thanks again for your help.

MarkMLl

  • Hero Member
  • *****
  • Posts: 6676
Re: Problem with Lazarus on RPi3b+ running Lubuntu 16.04
« Reply #9 on: October 20, 2019, 08:13:34 pm »
I have installed Lazarus 1.6 on my RPi3b+, and it seems to be working.
I've been trying to move a Lazarus application to the RPi.  It uses the libusb library which is loaded into a pascal wrapper unit with {LINKLIB usb} command.
This program works on my i386 Linux Ubuntu system, but when I try to compile it on the RPi I get the following message:

"usr/bin/ld.bfd: cannont find /lib/i386-linux-gnu/libusb-0.1.so.4.4.4"

I don't understand this since the directory it should be looking in is /lib/arm-linux-gnueabifh, with nothing to do with i386.

Any hints would be most welcome!

HOLD IT: Debian-based. They've messed around with libusb trying to deprecate the older version of the library, and while they thought they'd got it right for stuff based on GNU ld it's by no means a complete solution.

This from notes I've put in my dynamicl-linking library to handle it:

Code: [Select]
      FModuleHandle := LoadLibrary(FModuleName);
      FLastError := GetLoadErrorStr;
      if FModuleHandle = NilHandle then
{$IFDEF UNIX }
        if (GetLastOSError = 0) and (Pos(': invalid ELF header', LastError) > 0) then begin

(* I believe this is a Debian special: libusb-0.1 has been declared obsolete    *)
(* and "replaced by a linker script, in the hope it will make everybody happy." *)
(* The error message above might be subject to i18n, so users in non-English    *)
(* speaking locales might have at least as much grief as I've just had. Blame   *)
(* Aurelien Jarno :-)                                                           *)

          revisedFilename := LastError;
          SetLength(revisedFilename, Pos(':', revisedFilename) - 1);
          revisedFilename := readSecondLine(revisedFilename);
          if Pos('GROUP ( ', revisedFilename) = 1 then begin
            Delete(revisedFilename, 1, Length('GROUP ( '));
            SetLength(revisedFilename, Pos(' )', revisedFilename) - 1);
            FModuleName := revisedFilename;
            LoadModule;                 (* Recursive                            *)

(* Exits on success, otherwise raises the same exception as below.              *)

            exit
          end
        end;
{$ENDIF }
        raise DynamicModuleException.Create(SysErrorMessage(GetLastOSError)
                                        + ' loading ' + FModuleName);
 

I'm not saying that's a fix, but I'm very suspicious that it's related.

(Later:)

Sorry about the lousy formatting on the original post. I can't speak for Ubuntu but note that on Debian- from which Ubuntu derives- there are two versions of the libusb packages:

Code: [Select]
libusb-0.1-4 - userspace USB programming library
libusb-dev - userspace USB programming library development files
libusb-1.0-0 - userspace USB programming library
libusb-1.0-0-dev - userspace USB programming library development files
libusb-1.0-doc - documentation for userspace USB programming

and that some of the files don't have the expected content:

Code: [Select]
$ find . -iname 'libusb*so*' -exec file {} \;
./x86_64-linux-gnu/libusb.so: ASCII text
./x86_64-linux-gnu/libusb-0.1.so.4: symbolic link to libusb-0.1.so.4.4.4
./x86_64-linux-gnu/libusb-1.0.so.0.1.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=859f22f61deb3055534f3598cf3515b21d4bec3e, stripped
./x86_64-linux-gnu/libusb-1.0.so.0: symbolic link to libusb-1.0.so.0.1.0
./x86_64-linux-gnu/libusb-0.1.so.4.4.4: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=b3e8faeb321c0f4f79f58c9fe6cb893231f86e6b, stripped

Also, as you've found out, there's at least one broken symlink in there:

Code: [Select]
$ find . -iname 'libusb-0.1*so*' -ls
   393854      0 lrwxrwxrwx   1 root     root           19 May  4  2018 ./x86_64-linux-gnu/libusb-0.1.so.4 -> libusb-0.1.so.4.4.4
   393848     32 -rw-r--r--   1 root     root        31024 May  4  2018 ./x86_64-linux-gnu/libusb-0.1.so.4.4.4

$ ls libusb-0.1.so.4.4.4
ls: cannot access 'libusb-0.1.so.4.4.4': No such file or directory

MarkMLl
« Last Edit: October 21, 2019, 10:27:24 am by MarkMLl »
MT+86 & Turbo Pascal v1 on CCP/M-86, multitasking with LAN & graphics in 128Kb.
Pet hate: people who boast about the size and sophistication of their computer.
GitHub repositories: https://github.com/MarkMLl?tab=repositories

 

TinyPortal © 2005-2018