Android-NDK is mostly used to write/port native libs which can be called from Java through the JNI mechanism.
I have an ARM based evalboard embedding Android. This evalboard has a serial port so that I can log with a remote terminal on it and then launch commands or other apps ("command line apps" - non Java apps).
I wonder if that is possible with Android NDK to compile "pure" C applications which I will later use as a command on the remote shell? The main idea is to benefit from the toolchain provided by Google-NDK to build code which never interacts with the Dalvik machine.
Best Regards,
Apple92
Hello World C program using Android Toolchain is an article to explain how to compile using android toolchain. I think it useful to you.
Yes, you can compile command line programs using the NDK. If you take a look at any functioning Android system, you'll find many examples of command line programs which have been compiled using that same compiler.
Yes, there is BUILD_EXECUTABLE command, which acts like BUILD_SHARED_LIBRARY but produces an executable.
The trick is the libraries your executable depends upon - they will either need to be on device already (/system/bin) or you will have to upload them with your executable.
I came up with the following script to upload and execute tests:
#!/bin/sh
adb shell rm -r /data/temp
adb shell mkdir /data/temp
for i in dst/*
do
adb push ${i} /data/temp
done
cat <<EOF | adb shell
LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/data/temp
/data/temp/test
exit
EOF
Related
So I'm in terminal, and have a directory called CAPTURE on my desktop, I'm trying to run a program called 'testme'. I read that you need to have build-essential installed but I think that's only on Linux systems and I'm on a Mac so it wasn't necessary because it's already built in (I think). So, I navigated from ~ with:
cd Desktop/CAPTURE
Then, I tried running a bunch of different commands that I found while looking on the internet:
./testme
which returned zsh: exec format error: ./testme
xcode-select --install
which installed properly and I thought I could run the ./testme command but I got the same error as before. Then I tried navigating to the directory again and used
chmod +x ./testme
./testme
which also did not work. I've never run executables before so I really have no familiarity with these commands so they might be super wrong. If anyone can help me run the file properly, that would be much appreciated.
Since your question is tagged as C and Clang, and you are talking about build-essential, I will assume that you are attempting to build an application from source code.
Instead of build-essential, in macOS, you need Xcode. The Xcode CLI tools will work if the application is text-only or Curses, but you will need the entire Xcode IDE for any graphical application.
If running ./testme is telling you Executable format error is probably because it's a prebuilt executable, very likely a Linux ELF executable that will not run in macOS.
My suggestion is to try to build the software. Most C applications will build if you run make inside the directory. make is installed by default by Xcode. Other applications may need a third-party build system, such as CMake, but I do not know if that's the case.
I've installed Eclipse Neon (v4.6). Also, I have "Bash on Ubuntu on Windows" (Sept '16). I installed gcc and gdb for compiling and debugging in C. I tested them on terminal and they're running.
I'm trying to use Eclipse to create a new C project but in the compiler selection stage it doesnt give me the option to use the "Bash on Ubuntu on Windows" compiler.
Is there any way to solve my problem?
Because Bash/WSL is pretty new and the ability to correctly invoke Linux commands from outside Bash (using bash.exe -c ...) is not well understood by many dev tools (yet), you may have to do some work to define custom tasks/actions to call the necessary bash.exe -c "gcc ..." commands that you want to invoke.
However, you should absolutely be able to write/configure a makefile (or, perhaps even better, a CMake file) which can switch paths to lib/include/tools/etc. based on environment and then build smoothly on Windows or in Linux.
This very scenario has sparked an idea for a cool blog post that I'll work on and publish to our blog https://blogs.msdn.microsoft.com/commandline in the next week or two :)
HTH.
I think the best way to use the wsl for programming in C/C++ is like Microsoft does it. Visual Studio use ssh to connect to linux environment for "C++ for Linux Development".
So, in our case we can set up openssh server on wsl, connect to localhost from your IDE and start remote project.
Eclipse and NetBeans supports remote projects.
Clions I think not.
Here are Microsoft's instruction on how to configure Visual Studio
and wsl:
https://blogs.msdn.microsoft.com/vcblog/2017/02/08/targeting-windows-subsystem-for-linux-from-visual-studio/
May 2017
We use Eclipse and a makefile project. I configured Eclipse by adding an "external builder" - and use the following script:
-c "cd `echo '${project_loc}' | sed -e 's/C:/\/mnt\/c/g' -e 's/\\\\/\//g'` && make -f path_to_makefile/makefile
The "cd" and sed trick is to convert from Eclipse "C:\" to Windows Subsystem for Linux "/mnt/c/" and replace "\" with "/"
Make now executes in the project location as defined by ${project_loc}
I still have not figured out how to execute gdb on Linux. But at least compile+link (and execute unit tests as defined in my makefile) is now leveraging the full speed of the native Ubuntu toolchain...
I have some better way...
You can add new user terminal and give "Ubuntu.exe" location in eclipse under Local terminal setup as shown in screen shot.
in my case directory is ...
C:\Users\MyuserName\AppData\Local\Microsoft\WindowsApps\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc
if eclipse not able to select ubuntu16.4.exe, then write manually in path.
as shown in image.
Now just click on Apply and close. Open terminal (Ctrl+Alt+Shift+T) and select Ubuntu terminal.
Now, Navigate to source directory through terminal and compile you project. Enjoy...
Initially I followed espenalb's advice, but it didn't parse my build output correctly: double-clicking on lines didn't open the file, nor go to the line with the error.
I ended up changing the built-in CDT builder (instead of adding an external builder). I changed the build command to be the following (alex is my username):
bash.exe -c make 2>&1 | sed -e 's/\\/home\\/alex/C:\\\\Users\\\\alex/g' -e 's/\\//\\\\/g'
This way, the make output is converted from paths with "/home/alex" to the same path under "c:\users\alex". This fixes the parsing issue.
I also had an issue with eclipse replacing the build output with "Build not configured correctly" - I fixed it by disabling the "Scanner Configuration Builder" in the "Builders" submenu of the project properties (it's a C Makefile project). Also, need to remove targets "all" and "clean" from default build command.
Yet another variation. I managed to build with the external builder command set to
bash.exe -c "cd '${project_loc}' && cd directory_where_the_Makefile_is && make -j8"
I have been working on some C code on a windows machine and now I am in the process of transferring it to a Linux computer where I do not have full privileges. In my code I link to several static libraries.
Is it correct that these libraries need to be re-made for a Linux computer?
The library in question is GSL-1.13 scientific library
Side question, does anyone have a pre-compiled version of the above for Linux?
I have tried using automake to compile the source on the Linux machine, but no makefile seems to be created and no error is output.
Thanks
Yes, you do need to compile any library again when you switch from Windows to GNU/Linux.
As for how to do that, you don't need automake to build GSL. You should read the file INSTALL that comes inside the tarball (the file gsl-1.16.tar.gz) very carefully. In a nutshell, you run the commands
$ ./configure
$ make
inside the directory that you unpacked from the tarball.
I have managed to build a static C library on OSX using make on the command line.
I have tried to use the same Makefile (with ARCHFLAGS=-arch armv6 -arch armv7) to build a static library for iOS, but it fails with:
gcc-4.2: error trying to exec '/usr/bin/arm-apple-darwin10-gcc-4.2.1': execvp: No such file or directory
I guess it is not working because I'm using the OSX SDK make instead of a some part of the iOS SDK. Any clues?
N.B. For more details on the library in question (levmar) and for the Makefile, please refer to this Stack Overflow answer.
You need to find:
the location of the iOS compiler
the command line options that are used in the command line invocation
The easiest way is to create a test iPhone/iPad app in XCode, build it, and then look at the build log to find how XCode invokes the compiler.
Can you just make an Xcode project and invoke Xcode on the command line or from a script? If you don't want the fuss of maintaining an Xcode project, an easier approach might be to use CMake to generate an Xcode project and then invoke Xcode on the command line or from a script. This way you can stay in the text-file and script domain the whole time.
I'm trying to compile a downloaded program in Windows. The program is usually run in Linux, but is programmed to also run in Windows (the code has #if defined(_WIN32)'s in it, and claims to work with borland free tools). When I try to use make from the command line, it tells me "Incorrect command line argument: -C". In the makefile, there are many lines that say "make -C" followed by a directory name. Does this syntax not work in Windows? What is a correct way to do this? Is there any way to compile this for native use in Windows with this makefile?
Windows itself doesn't come with a make utility. Microsoft does have a 'make' utility that comes with their development tools (such as Visual Studio, the Platform SDK, or the Windows Driver Kit) but it's called nmake.
You probably need GNU make to process those makefiles. you can get a copy for Windows here:
http://unxutils.sourceforge.net/
However, if the makefile isn't written to be able to be run on Windows, it'll probably not work well. You'll also need to make sure you have whatever other development tools the makefile calls upon (maybe the Borland compiler or GCC), and there may be other configuration that needs to be done specific to the project you want to build. It's probably not a matter of just having the correct make utility.
-C is "change working directory" only for the gmake command (from the GNU package). You should take a look in the manual for your Make-Utility and see, wheather it supports something äquivalent.
Peter
Are you using cygwin?
Are there any instructions for installing on windows(perhaphs in a README file)?