Visual C++ Development Targeting Linux - windows

I've been a Visual C++ user for quite some time now, and in the following weeks, I will be joining a (C++) Linux-only project. It should be noted that I have absolutely zero development experience on Linux.
Currently, Visual C++ 9 along with the Visual Assist X add-in make Windows-based development rather enjoyable. Having looked at various C++ IDEs on Linux left me a little disappointed with the coding experience, however.
I'd love to be able to use my current tool set (see above) for Linux development, so I have a couple of questions:
Can the VS editor convert between CR+LF <-> LF in a reliable manner?
Is it possible to set up a system where if I press "Build" in the IDE all of my work gets transferred to another box (e.g., a virtual machine) running Linux that compiles my project?
How would debugging work? Is it possible to remote-debug an application running in Linux via something like gdb? If so, would the "advanced" features of MS's debugger (e.g., tracepoints, break-if-cond, etc.) be lost?
Is this even a sane thing to think of? Does anyone use a Windows environment for Linux development? If not, I guess I should just suck it up and move to a Linux environment all together...?
Any input is appreciated, as I feel a little lost right now.

It's probable you'll eventually want to suck it up and work on Linux. microsoft, for obvious reasons, builds their tools to be very Windows-centric and Windows-specific; there are even a few ways in which Visual C++ isn't quite standard C++.
That said, though, you can work with VC++ to some extent.
There are easy tools on linux that will translate to UNIX line endings from Windows. (called something creative like 'dos2unix')
You can set up a remote file system, like with ExpanDrive for Windows, to let you keep your files there.
You can run ssh or rsh from Windows to run makes on the remote Linux box.

I've done windows/linux/freebsd cross-platform development with Windows as my primary OS... so it is possible.
Use VS as editor.
Access Linux Dev node via SSH with
putty.
Use revision control system
(subversion/git/bazaar/mercurial/cvs)
to check changes into repo & check
changes out on Linux.
Use a multi-platform build process. I
use SCons. It is python based
and works beautifully - though it is
a little slow with the default
settings.
Launch build process from shell using
putty.
Use additional shells as needed to
attach gdb & debug.
Now to answer your questions:
Yes. There is a VS setting to say use unix line endings. Many revision control systems can also be configured to correct this for you.
Maybe, but that's not how I did it.
Yes, you can remotely debug using GDB. GDB has many (all?) the features available with VS's debuger but you have to learn the GDB commands. I don't know of a way to use VS's debugger to debug processes compiled with GCC - though this is a frequent request.

I'd recommend that you dive in and try to learn the Linux way of doing things. What are the other people on your team using? If you use the same tool-set as other people, you'll be much better of when asking for help. If you're sitting on a Windows box cross-compiling using Cygwin, you're more or less on your own.

I work on a Linux team currently but use Visual Studio + Visual AssistX as my IDE. VS+VAX is the best environment for developing code in my opinion. Nothing like it exists anywhere else that I've found.
What you want to do is:
Install Cygwin openssh and configure it for shelling into your linux machine without a password.
Expose your development tree on your linux machine as a samba share and mount the share on your Windows machine.
Create a Visual Studio "makefile" project referencing the files on your linux machine.
Override the make command to ssh into your linux machine and execute the build.
Write a sed script on your linux machine that converts gcc/g++ output errors into visual studio format. I use something similar to this: sed -e 's/(.):([0-9]): (.*)/z:\path\to\code\\1(\2): \3/' \

I would really recommend you to give Linux a shot natively, not through a virtual machine. If you run it under a virtual machine you will probably end up doing 85% of your activities under Windows and this will prevent you from actually learning anything under linux.
Install linux in its own partition and work on it fulltime. Do this ASAP before the project start and get familiarized with the basics on how to use it first.
Regarding IDE's to use, find out what build system the project will use and what libraries you will be using. KDevelop is a great IDE although it might be a bit too cluttered. I really like Qt-Creator.
You might wanna give Eclipse a shot too.
As of what distribution to use, I would recommend you Archlinux if you feel like really learning something out of this and learning about linux along with learning to do development under linux. If you dont really want to learn too much about linux and go straight into developing then go with Kubuntu.
As for what Desktop Manager to use I would go with KDE.

There is no Visual Studio on Linux. Period. Try KDevelop or Code::Blocks. They should make development fun on Linux.
As for the compiler/executables you'd have to use the GNU GCC toolchain. There is no MS cl compiler on Linux either.
The debugger to use is gdb, again part of the GCC toolchain.
One more thing, try to pick a shell (like bash) and read up on it. It'll save quite some time in future.

I wrote a ftp script to move files from my pc to the linux box,
then set it up as a tool, so i can at least write the code on the pc, and have
easy access to source safe. I hit a tool button, and the files get transferred to
the linux box, where i use the utilities there to do the work

& 3.:
I use cygwin + Eclipse on Windows for developing and compiling.
With this combination I can also debug via gdbserver on the target machine (VM with x86 Linux or ARM "real" target).
Unfortunately you have to do some tiny but important settings (library paths in gdb etc...) but as soon as it works......
Sorry, no solution for debugging from within VS on a linux box...and I think there will none in the near future...

What you will find is that there are dialectic variations in the compiler and the libraries are different enough that it's unlikely to work well.
You're probably better off with a gcc based tool chain like MinGW if you don't want to switch your environment to Windows right off. MinGW uses native Win32 ports of standard open-source libraries such as getopt, and it is fairly easy to port software between Linux and MinGW32 (as long as you're not using Linux or Windows specific APIs).
However, porting software from MinGW to Visual C++ is quite a bit harder. On the few occasions that I've done this sort of thing I find that porting between Linux and MinGW is much easier than porting between MinGW and Visual C++.
As far as I'm aware I've never seen a MinGW plugin for Visual Studio, although one could theoretically write such a thing as Visual Studio will let you use third party compilers. Additionally, you will have to work with whatever build system the rest of the team uses, which is pretty much guaranteed not to be MSBuild.
So, I'd guess that it's fairly unlikely to work well. Still, as Hunt & Thomas would say getting used to a different way of doing things will make you a better programmer. While vi (or emacs if you're that way inclined), ctags and gdb work quite differently to Visual studio they're still quite a powerful development environment. With MinGW32 and Cygwin or MSYS you can use these without having to make a wholesale switch across to Linux.

Related

How to use Eclipse (IDE) with Cygwin (Linux emulator)?

I apologize in advance for the stupidity of this question, but I am confused as h#&! and not even sure what to ask anymore.
For my math thesis - i.e., I am not a programmer - I have to write C code which uses the CVODE library, which is part of SUNDIALS (do you need all that detail?). But I can't work directly on the Gentoo Linux cluster where the proram will ultimately run.
According to the SUNDIALS' website, CVODE has very rarely been compiled and used in a native Windows environment, but it has been used using Cygwin. So I want to set up a C programming environment, including an IDE (especially a debugger), on my Windows PC, using Cygwin.
I have installed and executed the basic Cygwin (plus a package for nano editor) on my 64-bit Windows PC. I want to use Eclipse IDE, which is available for Linux and Windows, and can really only be used in a graphical interface (I think). I think I should set Eclipse up next (and then CVODE after that). That's what I'm trying to do now.
My basic question is how do I setup Eclipse to work with Cygwin? What Cygwin packages do I need to run Eclipse?
From the docs, I see that Cygwin has a server (Cygserver), but does not have a graphical interface. Or, it might have a graphical interface called Cygwin/X. Do I setup Eclipse in Windows to communicate with Cygserver, then do my work in Windows, but compilations and so forth would take place in the Cygserver? Or, do I install Cygwin/X and use a Linux version of Eclipse which, hopefully, works with Cygwin/X? If both are possible options, which is easier (I'm guessing the latter).
Cygwin is nice but I've run into issues now and then with it. I would recommend that you download Virtualbox or some similar VM software and install the same Linux that is there on your production cluster inside it. Then you'll have an environment on your development machine which matches the production one.
Now, install eclipse (and anything else you want) inside the VM and you can develop the software there smoothly without worrying about tangential issues like cygwin and the rest.

Writing code for a Mac using Lazarus

I have done a little work on lazarus' free pascal. So when a client asked me to write an application for a mac, after the initial, "it can't be done" stage. (followed by an asp.net maybe stage) i thought about writing it using lazarus.
Question is. I have only a virtual machine running mac OSX, this means that i do not really want to develop on the mac. However, i just cannot seem to get the applications that i have written in lazarus on windows to work on the mac. I have tried the deployment using the Lazarus Wiki and the MACOS folder is empty and so when i put it on the mac it doesn't run the application.
What is the best way of doing this or am i barking up the wrong tree?
It seems you want to do cross-compiling, which is theoretically possible, but may not be practical, for the reasons mentioned by Marco above.
As an alternative, you could install XCode, FreePascal, and Lazarus on a MacOX machine. You could still do your development and some testing on Windows/Linux. When you hit a certain milestone, you can copy your source code to the Mac and compile your application to test and give to the user.
Even if it were possible to easily cross-compile, there some minor differences between platforms, so (especially if it's a GUI app), you would want to test it on an actual MacOS box before giving it to the client.
I've taken the route described by Noah - and I was incredibly surprised that after about three weeks development on Windows, it took about 10 minutes to get the application running on the Mac.
My route was to install Xcode 4.3 on an old Mac Mini running snow leopard, then install Lazarus using the fink version as described here. This took a while but was done in an evening.
Then I just copied my folder across to the Mac, opened the lpi on the Mac, compiled it. It failed so I removed a windows references, recompiled, and it was working. I was truly amazed.
What linker and assembler do you use to generate binaries? To my best knowledge the linker for recent OS X versions is not available in source.
Afaik what you want (crosscompiling to Mac) is not possible for recent versions (and I've done it for PowerPC myself in the past).
The easiest is to use the Unix "file" command on the binary to see what is generated, and make sure it reads something with "MachO" in it. Easiest is if you have a Linux install (where this command is pretty standard), but versions can be found for windows too (cygwin, mingw and 3rd party)

Developing Linux software on Windows

I want to write software for the Linux platform, but I would like to do this on a Windows OS. I'm only developing Linux software for a remote server of mine, so it wouldn't be worth it to switch to Linux just for that. I don't think it's as simple as using a cross-compiler, because I will be writing code that uses headers specifically for Linux, and I would like to test the programs on Windows. I don't want to use VirtalBox etc.
If possible, install the entire development environment on the linux server. Then install an Xserver (e.g XMing) and an ssh client (e.g putty) on your Windows box. Then run the dev. environment remotely.
The big pro of doing this is that the linux windows integrate seamlessly in the Windows enviornment. I used to work with dual platform development and had a virtual linux box on my PC. Still, I used ssh+X-forwarding to access it. This way I got full copy-paste support etc. between the environments.
Now WSL (also known as "Bash on Windows") exists, you can run native Linux binaries directly on Windows. With snapcraft you can package Linux applications entirely under Windows, without using a VM. Might be a better option. I made a super quick video to explain it.
CoLinux allows you to run linux side-by-side with Windows.
You could try VirtualBox and virtualize a Linux environment from within Windows. I do the reverse of what you are trying to do and run Windows from Linux, and it works quite well.
If you are familiar with .NET and C# you can use Mono for your client.
You can use Visual Studio to develop and the Mono runtime one Linux to run the application.
You do need to keep away from windows specific code.
Maybe Cygwin could help. You don't need an entire virtual machine and only the api is emulated.
You could use g++ in cygwin to target a linux binary. It's a pain to setup as you noted you'll need the entire toolchain (not just the compiler). I've used crosstool (domain name makes me giggle every time) in the past with success. It looks like someone did the work already http://metamod-p.sourceforge.net/cross-compiling.on.windows.for.linux.html
However I've never targeted linux from windows. I'd install a virtual linux box, way easier and you're likely going to want to do your testing on a real linux box before going live.
Cygwin isn't linux so you can't test your linux binaries there.
Out of curiosity what's keeping you from doing the development on linux? If the server the app runs on isn't mission critical you could even develop there.

windows for trivial app?

we have a small app that doing trivial stuff, no GUI.
we was using Linux, but the library/framework available for Linux is highly less than that for windows, it was such a pain to develop under Linux.
So we want to use windows, but windows is too big for the trivial app, is there any solution that i can use windows and not losing OS's lightweight?
any advices appreciated.
What kind of applications are you building?
1) some older versions of windows have less bloat, but you wouldn't want these running on public networks because they don't get security updates. Plus, the latest/greatest libraries may not run on them
2) If you're running command-line server utilities, you could try Windows 2008 Server Core, which is a console-only installation
3) You might want to try Wine or Mono to run your windows/.NET framework-based application.
You should try a "Windows PE" (sometimes also called "minint") installation (installation guide here), which is a trimmed-down version based on Windows XP or Vista.
This does not make sense, sorry. If you have a CLI program under Linux why shouldn't you be able to write on CLI program on Windows?

Can Go compiler be installed on Windows?

I've been looking on golang.org for a Windows compiler, but I can't seem to find it. I can only see Linux and OS X compilers. Does anyone know if Go programming can be done on Windows, or is it something that Google hasn't implemented yet?
Update: appears that as of now (Nov. 2012) golang.org has official binary releases for windows 32/x86_64.
There are now installers for Windows, see Go under Windows
HelloWorld.go
package main
func main() {
println("Hello World!");
}
Compile with 8g, link with 8l and then execute. Example:
8g HelloWorld.go
8l -o HelloWorld.exe HelloWorld.8
HelloWorld
It hasn't made it onto the Go Lang FAQ yet, but from the changelog:
Why doesn't Go run on Windows?
We understand that a significant fraction of computers in the world
run Windows and it would be great if those computers could run Go
programs. However, the Go team is small and we don't have the
resources to do a Windows port at the moment. We would be
more than willing to answer questions and offer advice to anyone
willing to develop a Windows version.
Yes! As of 2012 the Go homepage offers an official Windows installer (32 or 64 bit) https://golang.org/dl/
Despite the fact that Go is only two days old, this question has already become a FAQ on the Go mailinglist. (Unfortunately, it has not yet been added to the FAQ list on the website.)
Basically, Go is done by a very small group of people, so they simply do not have the time nor the resources to do a Windows port. That very small group of people also happens to be the people who invented Unix, so that was kind of a natural first target.
So if you, like me, are on Windows a lot of the time and want to do some Go programming right now, you can do it on a VM. I use VirtualBox running Ubuntu in seemless mode. I already had it set up because I like Linux better than Windows for a lot of things.
Building and working with Go has been totally painless for me. I have a Bash open in a terminal to run my build and try my app. The source directory is a shared folder between Windows and Linux (a VirtualBox feature but I'm sure VMWare has the same thing). I edit my code in Komodo Edit on Windows and use Mercurial for the same source code on both OSes.
Not yet.
The authors of Go have very very deeply roots on non Windows operating systems ( Trivia: who of them created no less than the very UNIX operating system )
So, don't expect to have a Windows port from them any time soon.
The language is open source, so it will be just a matter of time ( make it from 6 - 8 ehrm months ) for a Windows implementation will be available.
Although there is no Windows version at the moment, it can presumably be compiled using Cygwin on a Windows platform.
Various efforts to port Go to windows are underway.
The most advance and that can already build and run some code is here: http://code.google.com/r/hectorchu-go-windows/
Installation of Go on windows is straight forward if you use the experimental x32 windows port . Documentation of the steps for Go installation on windows can found here
You will probably also want the MinGW tools (bash, make, gcc, etc...):
http://sourceforge.net/projects/mingw/files/
and the GTK+ files and tools (the "all-in-one bundle" includes pkg-config):
http://www.gtk.org/download/win32.php

Resources