Cygwin + Linux NDK on Windows - linux

I think this sounds strange but it's my situation now.
I have an Android JNI project on Eclipse (Windows), but after my friend 's configuration in his Eclipse on Ubuntu, now the auto-build plugin on my Eclipse couldn't work (It raise the error: ...ld.exe: can not find -l):
**** Build of configuration Default for project TachoPro ****
ndk-build.cmd all
SharedLibrary : libtachometer_core.so
E:/Android/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld.exe: cannot find -ltachometer_core_armv7_a_cortex_a9
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/libtachometer_core.so] Error 1
**** Build Finished ****
He said that I must download the NDK for Linux then use Cygwin to build. But another error (seems more complex than before) arrives:
http://www.mediafire.com/view/?o0nthcn3hn0b0ix
If you has been through this, please give me some advices... >"<

If you're working on Windows, you have to use the Windows version of the Android NDK, not the Linux.
If you took a configuration file from your friend which points to a linux executable, you need to fix that. only that.
can you post the configuration file he gave you ?

read about how to develop with Android and with the NDK, you don't need Cygwin to develop with the NDK under Windows, also Cygwin it's not meant to be an environment for developers ( it's written crystal clear in the project homepage ! ).
I don't know what you 2 are doing but surely it's not Android related or a good use of both Cygwin or Android tools.

Related

How to add libraries in Visual Studio in a Linux cross-compilation project?

I'm new to Linux (rpi 3) and trying to create a window application on it from my Windows PC with Visual Studio. Creating a console-application is no problem, since it doesn't require any libraries.
And the way I understood it is that there is no real standard Linux library for GUIs like Win32 on Windows, so you need to add external libraries.
I went for QT and downloaded already compiled files from qtrpi.com for the rpi3.
I added the lib path for the linker and the include path for the compiler on the projects properties page, but all I get is
1>/home/pi/projects/WindowProject/main.cpp:2:27: fatal error: QtGui\qwindow.h: No such file or directory
1>#include <QtGui\qwindow.h>
1> ^
What am I missing? This works without a problem on normal projects, only that it wouldn't run, since it is for Linux.

CMake try_compile() not finding correct Windows 10 SDK

I am trying to compile my fork of ReactOS using CMake 3.9.0-MSVC_2 (as included with Visual Studio 2017, 15.4 update). When I have CMake generate NMake makefiles or Ninja inputs, it works just fine. However, when I tell CMake to generate a Visual Studio 2017 solution, it fails with a weird error. Here's how to reproduce this issue:
Clone git#github.com:SunburstApps/ReactOS. (It's a big repo, so please be patient. I have not been able to consistently reproduce this issue on a smaller project, in case anyone asks.)
In the root of the project directory, run configure.cmd VSSolution from a VS2017 x86 C++ tools command prompt. This will tell CMake to generate a Visual Studio solution (the exact version is inferred from the copy of cl.exe in the path).
I get the following CMake output:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:24 (project):
The CMAKE_C_COMPILER:
cl
is not a full path and was not found in the PATH.
CMake Error at CMakeLists.txt:24 (project):
The CMAKE_CXX_COMPILER:
cl
is not a full path and was not found in the PATH.
-- Configuring incomplete, errors occurred!
Investigating the CMakeError.log file reveals the problem is actually something else. The vcxproj file that CMake generated to identify the compiler is refusing to link, complaining that ucrtd.lib can't be found. If I add the following line of code to the top-level CMakeLists.txt file, it will then progress slightly further (successfully identifying the compiler), only to die of the same issue during a try_compile() run to "detect compiler features".
set(CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 10.0.15063.0)
I have come to the conclusion that CMake is generating files without the Windows SDK target platform set, which is causing VS to refuse to locate ucrtd.lib. The set() line above tells CMake to add that specific version to the vcxproj files it generates, but clearly it doesn't add it to all of them.
I have tried other solutions I have found searching SO, including installing the Windows 8.1 SDK and running the CMake command as an administrator. Nothing helps. I need to generate a solution file so I can write code for this project using Visual Studio's excellent C++ editor. (I have also tried using the built-in CMake support in VS2017, but have found that it does not quite work due to ReactOS' specific cross-compiling requirements.) Can anyone give me some pointers? Thanks!

Building icsopenvpn

I have some issues in building ics-openvpn project. When I deploy the app on the device and try to import a .ovpn file, I get cannot find minivpn. I think this error is related to an error during the app building.
I've downloaded android NDK and set the path in Eclipse, downloaded cygwin and launched ./build-native.sh, but it returns me the error
./build-native.sh: line 1: ndk-build: command not found
I've tried to modify the path in the .sh with the path of ndk-build, but I get another error:
NON-CYGWIN COMPATIBLE MAKE PROGRAM.....
Anyone knows what steps I have to follow to properly build the project?
You should not try to build it with the cygwin. There is also a build-native.bat in the project which allows the project to be build with windows. Make sure that you have installed the ndk and ndk-build is in your PATH.
Run build-native.bat
make sure you must have NDK 8b and set the environment variable for the ndk file

Various issues installing igraph in Visual Studio 2010 and Cygwin/MinGW ("sys/time.h not found")

I couldn't get igraph to work with Visual Studio 2010 (supposedly many known issues), and so decided to try installing it in Cygwin. ./configure went fine. But make gave this error:
f2c/dtime_.c:16:23: fatal error: sys/times.h: No such file or directory
Makefile:2190: recipe for target `libf2c_la-dtime_.lo' failed
make[3]: *** [libf2c_la-dtime_.lo] Error 1
I tried installing it in MinGW and get the same error when I make. Should I be providing "sys/time.h" or a path to it? Where is sys/time.h? Using Windows 7.
Edit
The problems in Cygwin and MinGW was due to the wrong version of gcc being used by my clean installation of Cygwin (and a characteristic of MinGW). Solution here: Installing/compiling in Cygwin/MinGW - How to set the include "path"? (symbolic link?)
The problem in Visual Studio 2010 was due to building in "Debug" instead of "Release". One of igraph's creator, Gábor Csárdi, graciously provided an excellent step-by-step guide below that identified and resolved it.
Igraph actually does work with Visual C++ 2010 Express, we test this before releases, and I have just tried it. You need to do the following steps.
Download the source package specifically created for Visual Studio.
Uncompress the file into My Documents\Visual Studio 2010\Projects.
Open the igraph.sln solution file in igraph-0.6-msvc\igraph-0.6-msvc directory from Visual Studio.
Visual Studio offers to convert the solution file to the current format, do that. Just click on Next, Next and Finish.
On the toolbar, change 'Debug' to 'Release' to make release builds.
Choose Debug -> Build solution and wait until the library is built.
To test it you can open the solution file in the igraphtest directory, convert it as well, choose 'Release' builds, and then build it and run it from the command line. It is a simple C++ program that uses igraph to create a graph and write it into the file out.txt.
You don't have to set up include and library directories at all, everything is set up properly in the solution file, both for igraph and igraphtest.
is there an sys/times.h file?
I have a vague memory that I had to make that symlink on a system once.

fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'

I am using VS 2003 .Net on 32 bit XP OS. I have also installed "Microsoft Platform SDK" on my machine. Can I build vc++ application (binaries) targeted for 64 bit OS?
I am using following project options :
Name="VCLinkerTool"
AdditionalOptions="/machine:AMD64 bufferoverflowU.lib"
OutputFile="\bin\Release\MM64.dll"
LinkIncremental="1"
SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories=""C:\Program Files\Microsoft Platform SDK\Lib\AMD64""
GenerateDebugInformation="TRUE"
ProgramDatabaseFile="\bin\Release\MM64.pdb"
GenerateMapFile="TRUE"
MapFileName="\bin\Release\MM64.map"
MapExports="TRUE"
MapLines="TRUE"
OptimizeReferences="2"
EnableCOMDATFolding="2"
ImportLibrary=".\Release/MM64.lib"
TargetMachine="0"/>
I am getting following error:
fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'
Do I need to build project on 64 bit OS or I need to change project settings to resolve this error.
Please help me to resolve this issue.
I had the same problem today, here's how I solved it (in Visual Studio 2008):
Went to Project Properties -> Linker -> Command Line -> Additional Options and removed the /MACHINE:I386 from the linker additional options.
Hope it helps
Having the same problem in VS2008. My solution was to change the active solution platform located in Build -> Configuration Manager and creating a new solution platform using the x64 and copuing the settings from Win32. This allowed me to use the pre-build 32bit libraries in my 64 bit OS.
For 64-bit Windows users:
I had the same problem today, here's how I solved it (in Visual Studio 2008): I went to:
Project Properties -> Linker -> Command Line -> Additional Options
and added the /MACHINE:I364 from the linker additional options.
This worked fine for me.
I faced above error when I tried to build my custom library for ARM64 in Visual Studio 2017. And my target machine was already ARM64 as expected.
Apparently, problem was in ARM64 compiler which was not installed(though I could run build in ARM64). I installed it by running Visual Studio Installer Individual Components -> Visual C++ compiler and libraries for ARM64
Next I got error MSB8022: Compiling Desktop applications for the ARM platform is not supported.
It was resolved by adding
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
...
<PlatformToolset>v141</PlatformToolset>
<WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>
into my project file.
After all of above I could succefully build my project in ARM64.
Hope it will be useful.
This error comes up because something in you build is being compiled in the wrong architecture (say as a x86 binary when everything else is x64). The linker panics and doesn't know what to do with it, so it breaks your build.
I can speak for your problem because the error message you quoted is incomplete. Usually it goes something like this:
SOME_KIND_OF_OBJECT.obj: fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'
You look at the name of the obj file and you'll find the root of your problem there. Whatever obj is listed will have some kind source code analog with the same name. Have a look at it and see how it's being compiled. Usually all that stuff is automated in VS but sometimes there are special build steps that were added in by the developer. Inspect the custom, pre- and post- build events to see if a x86 tool is being used to assemble it. The property sheet in VS2010+ will be specific to the obj and the platform so you can inspect the library directories being used to verify that they are not 32 bit.

Resources