Boost library file generation - c++

I am trying to compile boost 1.52 library files with Visual studio 2013. To do so, run the file b2 with the visual studio prompt command.
Everything seems to run correctly . However, the lib files that I am getting in /stage/lib/ have no version of VC. For example, I have
libboost_date_time-vc-mt-1_52.lib
My dynamic libraries require
libboost_date_time-vc110-mt-1_52.lib
When I rename all files by substituing vc with vc110, it works as a charm, but it is a very fastidious process.
I made some researches and I could see that one could control the version of Boost with respect to the version of VS. I tried the following command
b2 toolset=msvc-12.0
Yet, I still get the versionless file.
How do I make it work ? Thanks.

boost 1.52 was released in 2012. At this time, Visual Studio 2013 was not an existing compiler.
You are compiling a library with a not officially supported compiler. You're actually even lucky that boost 1.52 compiled with Visual Studio 2013.
It's not surprising that b2 is unable to add vc110 to your libraries names. There may be a case statement somewhere in boost build system configuration files that has a version name for every "supported" compilers....and there may be no vc110 there...
You need either to take the first boost version supporting Visual Studio 2013 or use Visual Studio 2010 compiler (which is supported by 1.52)....or rename the files manually as you did.
By the way, note that renaming the libraries will make auto-link fail if you are plannign to use it. See boost\config\auto_link.hpp: this explicitely handle every compiler version....will only work with officially supported compilers.

Related

Installing glut on visual studio 2013

I'm trying to compile the freeglut utilities from http://freeglut.sourceforge.net/docs/install.php Compiling instructions are not provided for Visual Studio 2013 and I don't see any solution file, nor a visual studio folder.
The instructions for windows are provided in README.win32 and it seems to support being built with cygwin or mingw only.
Frankly I would create my own vcxproj for it and add the cpp files indicated by the buildscripts manually until it builds. That will, at least, ensure that the resulting dll uses the same c-runtime settings as the rest of my Visual Studio projects, produces MSVC compatible libs etc.
Alternatively the freeglut download page does link some 3rd party pre-compiled windows binaries that will either be very convenient to use - or a total #!! ache if its built with a c-runtime linkage that disagrees with your project.

VS12 Buiding Boost Library fatal error LNK1104: cannot open file 'libboost_system-vc110-mt-gd-1_58.lib'

I've been trying to build boost:asio for Visual Studio 2012.
I already did bjam and it gave me the include and lib addresses, which I pasted in VS settings.
Now compiler can't find 'libboost_system-vc110-mt-gd-1_58.lib', but in stage lib I got the 'libboost_system-vc120-mt-gd-1_58.lib', that is probably a newer version.
How can I solved this?
I searched it for days and couldn't get through this.
Looks like you are using VisualStudio 2012 (is requesting vc110 version libraries) but you actually have build boost for Visual Studio 2013 (vc120).
You need to specify the right toolset to boost build (--toolset=msvc-11.0) and not let him pick the default.
Are you using an older-than-last version of boost?
Make sure that your version does not predate the support for VS2012. The mechanism for detecting the version is different in bjam and in the autolink headers, so that with recent versions of Visual Studio you can end up trying to link to the latest version known of boost "vc110", even though bjam detected it correctly.

MSVCR100D.dll is missing when build/running project from another PC/VS

I uploaded my (VS2013) project folder and provided it to the other members of my team, but when they tried to build/run it, using Visual Studio 2012 they got this error, it also happened on their version of Visual Studio 2013.
The program can't start because MSVCR100D.dll is missing from your computer. Try reinstalling the
program to fix this problem.
They reinstalled VS2010 but no go.
I also tried to statically link my project by using /MT in the Code Generation options but now I get:
Unresolved External Symbol __free_dbg libcmptd.lib cout.obj
....25 more...
How can I get it so my project can be build/ran on my team members pc? How do I resolve the unresolved externals? It seems to happen purely with regular Microsoft files.
You are mixing C++ libraries built with different versions of the compiler (and as we know some of them are linked against debug dynamic version of VC10 runtime library). This is not supported, as different compiler versions have different ABIs.
To fix the mess you need to find libraries built with parameters that match parameters of your project. They should be built:
with the same compiler version (ex. VS 2013)
with the same configuration (Debug/Release)
against the same platform (x86/x64/ARM)
against the same runtime library variant (static/dynamic + debug/release)
You could either try to find prebuilt versions on the web or to build libraries yourself from source codes. Often, you will want to have multiple configuration/platforms for your project and, thus, you will need multiple versions of your libraries.
If your search will not succeed (for example if there is no VS2013 build for a closed source library) you could roll back your project to another version of compiler and to start over.
Any attempts to link incompatible libraries even if somehow succeeded will lead to random crashes.
This message generally states that the dll is referred to directly or indirectly in your application and is missing.
The 'D' at the end show us this is the Debug version of the file, this is DLL file is provided with the Visual Studio 2010 installation. So the MSVCR100D.dll would be provided with the installation of Visual Studio 2010.
Of course, you could be missing other versions 2008 (MSVCR90D) 2010 (MSVCR100D) 2012 (MSVCR110D) or the 2013 (MSVCR120D), each dll is provided according to the Visual Studio version.
There are a few ways to solve this:
Check to be sure that you're compiling all the components of your
project in Release mode. If this does not solve the issue continue
to the next steps.
You could solve this locally by installing Visual Studio 2010 on your
machine. This is not what I would recommend, but it would surely
overcome the issue
You could also download the file from this third party website and
copy it to your projects bin:
http://www.dll-files.com/dllindex/dll-files.shtml?msvcr100d
This option is the LEAST recommended option.
Run dependency Walker and see what file depends on the MSVCR100D.dll
and the try and fix that file in order to break your dependency. You can download depends here: http://www.dependencywalker.com/
Check to be sure that you're project is linking the correct version of
the CRT and any other libraries you may be using (e.g., MFC, ATL,
etc.)
Note: Installing the redistributables alone will NOT solve this problem, since the redistributables only contain the release version of the file MSVCR100.dll (notice no 'D')
Would it be possible that in your project you are somehow using some component/library built with Visual Studio 2010, which requires the MSVCR100D DLL?

Compiling libmodplug on windows

I'm trying to compile a release version of love2d on windows. I got all the dependencies downloaded / compiled. However, I have one last problem that I cannot fix:
The object or library file
'lib\libmodplug.lib' was created with
an older compiler than other objects;
rebuild old objects and libraries
I had similar issues with other dependencies, however I was able to compile those dependencies. The libmodplug source does not provide a Visual Studio solution or project file, and I couldn't find any hints on how to compile this under windows.
By the way, I'm using Visual Studio C++ Express 2010.
Thanks in advance!

Visual Studio 2008 Express MFC Support

As may be known by many, the Express versions of Visual Studio 2008 don't include support for MFC and a few other packages required to compile a lot of windows programs.
So, here's my problem:
I have the full version of Visual Studio 2005. I've been using this to compile a project that a friend of mine was working on, so that I could test it out for him and continue to track bugs and things. Recently, he upgraded that project to VS 2008, which I don't have. So, I downloaded the express version in the hopes that I could simply compile with that, but no luck, it complains about headers missing left and right.
It seems to me that since I already have the full version of VS 2005, I'm bound to have at least some (perhaps older) version of the files in question that his project needs to compile against.
Is there a way I can convince VS 2008 to also look in 2005's directories for include files and library files to compile against?
Furthermore, is this a bad idea? I would really prefer not to go out and purchase VS 2008 full, as I'll never use it myself. (2005 does the job fine for me at the moment, and I tend to prefer GCC anyway.)
Thanks
You can use the VC++ compiler directly from the command line, or just create a new project w/ the source in Visual Studio 2005. Unless he is using some functionality provided in the new versions of MFC/ATL in 2008/2008sp1, you should be able to compile the project just fine.
See ("Create Project from Existing Source") in Visual Studio 2005. It is unfortunate that they don't include these libraries with the Express Editions.
Use the vcvars*.bat script(s) from Visual Studio 2005. See this blogpost from VC++ Blog to see how. You will use the old compilers, but the build system from Visual Studio 2008.
You can go into Tools>Options>Projects and Solutions>VC++ Directories
and alter the Include, Library, and Source (and Reference maybe?) folders to use VC++ 2005's folders.
I'd guess you just replace $(VCInstallDir) with a hardcoded VS 2005 path. I'd record the original values before doing this.
However, have you just tried using the OLD 2005 sln and vcproj files? Keep using 2005 on your end and 2008 on his. Keep two sets of these files for each IDE. Any issues are going to be with the library mismatch - which you're not avoiding by using 2008's tools with 2005's libraries.
The simple way to deal with this would be to revert the solution and project files back to their visual studio 2005 state from source control(you are using source control right?). At this point you can compile the project as long as your friend does not use any of the mfc 9 only functions.
The first thing I would try is loading this up in VS 2005 by just modifying the version of the .sln and the .vcproj files. In the .vcproj change the version from 9.00 to 8.00 and in the .sln change the format version from 10.00 to 9.00.
If you don't have fancy stuff in the project you have a high chance of just being able to use it like this. Also this would avoid having to update 2 project and solution files.
On this website it is shown how MFC code can be compiled with the Visual Studio Express versions:
link
Just for the record, I've done that(by modifying the include directories and library directories from inside the IDE) and it's working pretty well, I have MFC, ATL, everything.
I've found this explanation. http://www.codeproject.com/Articles/30439/How-to-compile-MFC-code-in-Visual-C-Express