What ARM microarchitecture (ARMv4I / ARMv7) was this DLL built for? - arm

I have inherited a blob of a VS2008 project. It has 20+ DLL’s that have been used and reused over many different projects. Some of the DLL’s are built as subprojects in VS Platform Builder. Others are built with the SDK in VS2008. In Platform Builder I can see the /MACHINE is set to ARMv7. In VS2008, I can’t tell what it is building, (Target Machine = Not Set). (This is unmanaged code.) DUMPBIN /HEADERS tells me the DLL is using the THUMB instruction set.
The build config platform-names are: AM3517 (ARMv4I), iMX6 SDK (ARMv4I), _TGTCPU
I’m trying to figure out if the DLL has been built to work on ARMv4I or ARMv7 microarchitecture. This Q says ARMv4 code is not fully compatible with ARMv7. It appears that Platform Builder generates ARMv7 code while the VS2008 generates something different. I’m not sure if the platform-name reference of “ARMv4I” is leftover from earlier projects or it really is generating ARMv4I code.
How can I tell which microarchitecture the DLL was built for?

Related

Using different GCC to build Linux vs Linux Apps

This question may seem weird for some gurus out there, but I'm a little perplexed.
Basically what I want to do is to evaluate different tool chain for developing applications on embedded Linux. Say I have my Linux built using Yocto Project, which cross-compiles GCC from scratch can provide it as a cross toolchain for apps developers.
But if I want to try out different toolchains fro this point, say Sourcery CodeBench or a toolchain generated using BuildRoot, is it possible to build a applications using these toolchains and still run them on the Yocto-generated Linux? I'd imagine this is doable is built statically. But if we then want to link dynamically, it's simply a matter of copying over libc?
Thanks for the help. Sorry if question is ambiguous.

What processor architecture should I choose for an app destined to run on Windows? x64, or ARM?

I am creating a WPF / XAML app. When I try to drag a Bing Map control onto my WPF form, I get:
I then tried to build the project, and got these two msgs:
Warning 1 Project "Platypus" depends upon SDK "Bing Maps for C#, C++, or Visual Basic v1.0"
which supports apps targeting "Windows 8.0". To verify whether "Bing Maps for C#, C++, or Visual Basic v1.0" is compatible with "Windows 8.1", contact the SDK author or see http://go.microsoft.com/fwlink/?LinkID=309181.
Error 2 The processor architecture of the project being built "Any CPU" is not supported by the
referenced SDK "Bing.Maps.Xaml, Version=1.0". Please consider changing the targeted processor
architecture of your project (in Visual Studio this can be done through the Configuration Manager) to one of the architectures supported by the SDK: "x86, x64, ARM".
What processor architecture should I choose for an app destined to run on Windows? x64, or ARM?
UPDATE
So I changed the project to x86, and now when I go to the Designer, it tells me, "Design view is unavailable for x64 and ARM target platforms."
UPDATE 2
So I tried the "fix" here, but it didn't help - I still see that same message.
I guess using the x64 is good since you are trying to build a desktop application. ARM is actually an architecture for embedded systems. Desktop computers have two architecture x86 which is know as 32bit and x64. x64 architecture can support more RAM and x86 only supports 3GB of RAM so you can get more power. But if you built it on x64 Architecture, x86 can't use it.. and if you built it on x86, x64 can use it. You make the choice.

Cross Compilation for C applications using Eclipse

I'm developing a java application which uses native code with JNI, so I developped a C shared library using Eclipse with the CDT plugin on Linux Redhat. Everything works fine since I can launch my java application and call the native methods without any problem. But my problem is, I need to compile my code on every platform (Linux, Windows, x86/x64). It's not a problem to get the libXXX.so file but I also need a .dll to run on Windows, except I can't just compile my code on it, I need a way to do that locally on Linux with Eclipse. So I am looking for some simple solutions to do that locally with Eclipse using cross compilation.
I've made some researches but I can't find a real tutorial to explain how to do that, each time people say to compile on the specified platform. So if someone could help me with this that would be great.
My configuration is : Linux RedHat, Eclipse Juno, CDT plugin 8.1
You need a Linux -> Windows cross compiler. The MinGW tools would do the job, but, last I checked, they only provide binary downloads to run on Windows (i.e. not a cross-compiler). There are some (old) instructions for building your own here.
The CodeBench compiler is probably exactly what you want, but it's not free (there is a free trial though). It's basically a professional build of the MinGW tools, and comes with it's own customized Eclipse so there's no fiddling about needed in that department.
A quick google also comes up with these tools on sourceforge, but I've not tried them.

Compiling 32-bit application using Visual Studio on a 64-bit machine

I'm trying to compile a simple 32-bit Hello World application written in C using Visual Studio 2010 on a 64-bit machine on a Windows 7 fresh install. I also installed the "Windows SDK for Windows 7 and .NET Framework 4" after installing Visual Studio.
I built the application selecting "Win32" as platform. It works on Windows 7 but if I run the application on my 32-bit machine with Windows XP Professional (fresh install also this, without softwares and Service Packs) it seems not working getting this error:
"This application has failed to start because msvcr100.dll was not found"
If it can be useful Dependency Walker detects 2 errors (see the linked picture for details):
"Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module."
"Error: Modules with different CPU types were found."
http://img820.imageshack.us/img820/4725/errordp.png (PIcture)
How can I solve it? Thanks!
The machine on which it is run needs the runtime libraries. See this MSDN information.
Don't trust Dependency Walker on this... It clearly shows your exe is 32 bit. Your problem is with the VC redistributables, which are the CRT dlls - look for vcredist_x86.exe in your VS installation. You should run it before you run your app.
Another option is to statically link the CRT. See the /MT option. Will make your exe larger, but save the vcredist stuff.
The problem here is the C runtime used by the compiled program is missing on the Windows XP machine. Visual Studio 2010 will by default us the 10.0 (msvcr100.dll) runtime which is not available on XP by default. You need to manually deploy the C runtime on your machine in order for your program to run.
You may want to read the following MSDN article which discusses the issues around deploying C applications built with Visual Studio 2010
http://msdn.microsoft.com/en-us/library/zebw5zk9.aspx
There may be additional 32 / 64 issues at work but this appears to be the primary problem
The answers about the runtime library are correct. Another possible solution is to link to the static runtime libraries rather than to the DLL versions. This way you can build an executable that you can drop onto any machine without extra deployment hassles.
It's a trade-off, but, without knowing more about your situation, it might be worth considering.

Good IDE/compiler for simple C dll's

I'm trying to disassemble a C/C++ DLL, and have made some progress, but I would like to create my own C DLL with the same function the original exports, and compare disassemblies.
Visual Studio adds to much crap, and when I remove the crap and build my project, the expected DLL is missing.
I need a lightweight, preferably IDE, tool to edit and build very simple C libraries.
Take a look at Code::Blocks
I need a lightweight, preferably IDE, tool to edit and build very simple C libraries.
I have found that one of the best ways to do integrated C-only Win32 development is using the freely available Lcc Win32 Compiler which comes with a built-in IDE, including resource editor.
In fact, it is really very lightweight and can be run from a USB stick with some manual tweaking.
It's indeed a really small download of just 6 mb and you can even download an optional Win32 API help file which is really useful while doing development.
The compiler also comes with a C tutorial, as well as good user documentation detailing how to use the integrated Win32 resource editor "wedit", there's also an advanced manual about more complex development tasks.
Dev-C++ is a nice and fast IDE which works well with MingW.
But it's all been asked and answered before ...
MinGW adds its own crap. Install your VC express properly and save yourself a lifetime of trouble.
Btw, you don't need to use Visual Studio for its compiler or vice versa. The oddity of missing a build dll is probably because you are not looking at the right path.
If you are building C DLLs you really would benefit from its command line toolset and utilities, sdks, easy config etc. MS lock-in proprietary extensions are widely used (in context of you trying to emulate another dll), and last thing you need is chasing cross compiler issues..
GCC + any text editor such as VIM is a very light alternative.
For Windows Development, all you need is inside MinGW
Edit: If you are in dire need of an IDE you can also use the MinGW tools from Eclipse with the CDT plugin. Although it adds weight to the solution because of the installation of Eclipse, this is what I really use to build my small DLLs (JNI wrappers in my case).
You can setup your small and direct makefiles or let Eclipse do it automatically for you and concentrate only on the source files (*.h, *.c).
The best part of using this approach instead other IDE is that you do not need Eclipse to further build the DLL, since the underlying project files generated are standard ones directly usable by integrated dev inside MinGW (or any Unix distro) such as make, configure, automake, and so on.
I'll second the vote for Code::Blocks, it's what I use (despite having VS 2008 installed as well). It is very simple and lightweight but has basically all the features you'd expect out of an IDE. It comes with several predefined project templates for all kinds of C and C++ development, including templates for DLLs.
Download the version that includes MinGW and you get a complete lightweight IDE ready to start compiling. You can also easily configure it to use the Visual Studio compiler instead of gcc if you prefer.
try Open Watcom. A cross-platform product, well-supported by the community, lets you develop in DOS, Windows, OS/2 etc for a lot of platforms. Version 1.8 was released recently. Has a light-weight IDE indeed

Resources