[nrobinson@localhost po-util]$ which arm-none-eabi-gcc
/usr/local/bin/arm-none-eabi-gcc
[nrobinson@localhost po-util]$ strace arm-none-eabi-gcc
execve("/usr/local/bin/arm-none-eabi-gcc", ["arm-none-eabi-gcc"], [/* 49 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1) = ?
+++ exited with 1 +++
I’m going to see what happens when I follow this guide.
Edit:
No change after changing SELinux to permissive mode.
Edit:
I get similar results on Arch for strace:
execve("/usr/local/bin/arm-none-eabi-gcc", ["arm-none-eabi-gcc"], [/* 19 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1) = ?
+++ exited with 1 +++
Edit:
This problem has also happened in the past on Ubuntu (14.04) on Travis CI.
However, Circle CI (Also Ubuntu 14.04) does not have any problems.
Neither does my Ubuntu VPS (16.04), which is able to use po-util just fine.
I Googled and found an article that says you can get the not found message if one of the dependent libraries isn’t available. I guess that attempting to execute the compiler causes a cascade load of other modules and it’s one of those that wasn’t found.
[root@c7va bin]# ./arm-none-eabi-gcc
-bash: ./arm-none-eabi-gcc: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
[root@c7va bin]# strace ./arm-none-eabi-gcc
execve("./arm-none-eabi-gcc", ["./arm-none-eabi-gcc"], [/* 24 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1) = ?
+++ exited with 1 +++
[root@c7va bin]# file arm-none-eabi-gcc
arm-none-eabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
yum install glibc.i686
[root@c7va bin]# ./arm-none-eabi-gcc
arm-none-eabi-gcc: fatal error: no input files
compilation terminated.
So I was able pretty much reproduce the error that you get. That last command suggests that the code can now be loaded and it simply needs an input file. The reason why I installed glibc.i686 was because it was one of the packages that I used to install when I was building my own Docker containers for compiling the Particle firmware. That was 18 months ago so I’ve forgotten why I had to do it but this is probably why
@timx
Thank you for your help. Installing the glibc.i686 package fixed the arm-none-eabi-gcc part of the problem, but I also had to install vim-common to provide the xxd command, and perl-Archive-Zip-1.58-1.fc24.noarch to provide to crc32 command. Installing these 3 extra packages makes po-util work perfectly on my Fedora virtual machine.
I suspect that to fix the problem on Arch, I will have to install something like glibc.
Update:
Installing lib32-glibc, vim and yaourt with pacman and installing perl-archive-zip from yaourt worked for Arch.
Update:
Installing the libc6-i386 package on Ubuntu fixes the problem for Travis CI.
I have added these packages to the installation part of po-util, and it should now work on all of these distributions.
Update:
I think arm-none-eabi-gcc requires the 32bit libraries for C.
I have now built a Library manager into po-util. It lets you download and use libraries hosted on GitHub easily in multiple project directories by creating symbolic links. Here is a preview of the commands for the Libray manager:
"po library": The Particle Library manager for po-util.
Libraries are kept in ~/.po-util/lib
Commands:
get Download a Particle Library from GitHub and optionally name it.
install Example:
po lib get https://github.com/user/libraryName libraryName
add Add a downloaded library to a po-util project.
import Libraries are added in the firmware directory as soft links.
Example:
po lib add libraryName
remove Remove a library from a po-util project.
rm Just the soft links are deleted.
Example:
po lib rm libraryName
create Create a library from C++ files in the project directory.
Example:
po lib create someLibrary
purge Uninstall (delete) a library from ~/.po-util/lib
Example:
po lib purge someLibrary
list Show all libraries in ~/.po-util/lib
help Show this help documentation.
I have also fixed some minor bugs.
UPDATE:
I made a post about how to use the library manager to download a library available on the Web IDE.
I have added support for Atom Build shortcuts for po-util. The shortcuts are interpreted by the atom build package, and the corresponding po-util command is run.
Atom Build Shortcuts:
Build CTRL-ALT-1 These shortcuts allow you This requires the
Flash CTRL-ALT-2 to run common po-util "build" package for
Clean CTRL-ALT-3 commands quickly while Atom. Get it with:
DFU CTRL-ALT-4 using Atom. "apm install build"
OTA CTRL-ALT-5
I have updated the library manager commands to automatically add and remove includes to and from the firmware/main.cpp file when a library is added to a project, just like how the Web IDE adds includes when libraries are added.
Hi,
First, thanks a lot for this amazing tool. I finally managed to get everything as I wanted : to be able to work off-line.
Three requests/questions regarding your tool:
When adding a library that has more than one set of .cpp/.h, only the files named by the library is imported. Example: I’m fetching Adafruit_SSD1306 from https://github.com/pkourany/Adafruit_SSD1306.git and I had to manually add the symbolic links to the Adafruit_GFX.* files.
Not sure if you can do something about this one. The following library: Adafruit_GFX has its file within a firware directory which doesnt’t seem to be consistent with what you’re expecting. As I want to kept the “git” update available, I don’t want to mess with the directory in ~.po-util/lib.
Adding automatically the header may be fine for some user but in my case, and I shouldn’t be the only one ;), the main.cpp is not where I want to add the headers. So maybe keep this as an option ?
Once again, your tools is pretty amazing, and really usefull !
po-util can now download libraries from Particle Libraries 2.0 using particle-cli.
Libraries can be downloaded using the po lib get command, supplying the name of the library instead of a URL to a repository.
Libraries are added to the central library folder ~/.po-util/lib just like Git libraries.
Example:
$ po lib get neopixel
po-util will use particle-cli to download the library because the argument is not a URL.
If you enter an invalid library name, po-util will use particle-cli to search for libraries instead, so that you can find the library you want.
Example:
$ po lib get liquid
Attempting to download liquid using Particle Libraries 2.0...
Checking library liquid...
Library liquid not found
> Found 4 libraries matching liquid
LiquidCrystal 0.0.3 1121 LiquidCrystal on Spark Core
LiquidCrystal_I2C_Spark 1.1.0 816 LiquidCrystal_I2C ported for Spark Core
Adafruit_LiquidCrystal 1.0.2 125 A fork of Adafruit LiquidCrystal library that support i2c / SPI character LCD backpack.
liquid-crystal-spi 0.0.1 88 A Hardware and Software SPI driven LiquidCrystal library for Spark Core.
You can add a library to a project the same way you would add a Git library:
@jaza_tom
It could be that it doesn’t like that your folder has a space in it. Never really seen this error before but I would definitely try renaming JazaHub Controller.
Update:
I just confirmed this on my machine, a directory path with a space in it will produce this error. I’ll try to find a fix for this. In the meantime I think po-util will work if you rename the JazaHub Controller directory to something more friendly like JazaHub-Controller.
Hope you enjoy using po-util for your projects! I’d recomend looking into the library manager. It’s pretty slick, and it can use libraries from GitHub or Particle Libraries 2.0.