ClCompile and Emscripten - c++

I had a error with a basic hello world from a set of examples from Emscripten/tests/msvc10
I have a error MSB4096 but i don't find the solution of the problem on visual Studio 2012.
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppBuild.targets(817,5): error MSB4096: The item "..\hello_world.c" in item list "ClCompile" does not define a value for metadata "ProgramDataBaseFileName". In order to use this metadata, either qualify it by specifying %(ClCompile.ProgramDataBaseFileName), or ensure that all items in this list define a value for this metadata.
Do you know the reason?
thanks

When trying to compile keep in mind 2 things:
Do no try to compile managed C++ code with emscripten.
the code is running in browser sandbox
The metadata stuff in your code seems really related to the first issue (managed code).

You have to set the 'Program Database File Name' (ProgramDataBaseFileName) Property in the VS C/C++ Options of your Project e.g. to '$(IntDir)$(TargetName).pdb'
ProgramDataBaseFileName exposes the functionality of the compiler's /Fd (Program Database File Name) option.
MSDN ProgramDataBaseFileName

Related

How to generate the respective protobuf files in Visual Studio during the compilation process automatically?

I have several protobuf messages in a folder which I'd like to automatically convert into the respective header/cc files and then continue the compilation process inside of Visual Studio.
The best solution that I could comeup sofar was to define a Pre-Build Event through Propertise>Build Events>Pre-Build Event and specifying the following as the command:
$(SolutionDir)Dependencies\include\protobuf\bin\protoc.exe --proto_path=$(SolutionDir)Dependencies\include\messages\ --cpp_out=$(SolutionDir)Dependencies\include\messages\ message.proto message2.proto message3.proto
There are currently 2 issues concerning this solution :
I have to manually add each filename myself. How is it possible to make the filenames get picked automatically by VS2019? I tried %filename% macro, to no avail since it seems it returns the project file names only.
I also found out, these files are not generated each time I change the messages. even cleaning the projects, doesn't delete them, so I have to manually delete the generated files and try rebuilding the project again!
Other than resorting to a batchfile that can get called as a prebuild event, how can I achieve this inside Visual Studio without doing that?
I suggest you could refer to the following steps:
1,Modify the properties of the .proto file:Item Type:Custom Build Tool
2,Configure project properties: Properties -> Custom Build Tools -> General
command line:$(SolutionDir)Dependencies\include\protobuf\bin\protoc.exe --proto_path= .\proto %(Filename).proto --cpp_out=$(ProjectDir)protocpp
Description: protoc %(Filename).proto
Outputs: $(ProjectDir)protocpp%(Filename).pb.cc
Add Outputs to Item Type: c/c++ complier
And then you could try to build the .proto file.
Note: The newly added the .proto file also needs to select the operation of the Custom Build Tool

Automatically generated WAF solution fails to load

Cryengine as an SDK has recently switched from providing pre-made solutions to forcing developers to use a WAF based build system to automatically generate a visual studio solution. Right now, there's very little communication coming from Crytek about problems everyone is having with the new build system so I was hoping someone here might be able to help.
I'm getting Cry-WAF (Crytek's WAF based build system) to generate a solution, but when I open it it provides an error (quoted below) and in the solution explorer appends (load failed) to each project in the solution. I first had an issue generating the solutions with Cry-WAF's msvs.py script saying it couldn't gather properties for platforms/configurations, but that eventually stopped and allowed the solution to be generated with the quoted problem.
A generic google search on the root cause suggested I try enabling IIS, but that has done nothing to fix the problems. Editing the .vcxproj files shows that they're correctly listing the paths to all files associated with that project. The only thing missing in the solution seems to just be the information that would tell what compiler to use, target names, target paths, etc. With what little I know about WAF as a build system, I'd assume that the python code Crytek is using to gather that information is just utterly failing.
Does anyone have a suggestion on what could possibly be done?
c:\Program Files (x86)\Steam\SteamApps\common\CRYENGINE\CRYENGINE_pc_eaascode\Solutions.depproj\CryAction.vcxproj : error : The composition produced a single composition error. The root cause is provided below. Review the CompositionException.Errors property for more detailed information.
1) Specified argument was out of the range of valid values.
Parameter name: index
Resulting in: An exception occurred while trying to get the value of property 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.VCConfigurationShim'.
Resulting in: Cannot get export 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.VCConfigurationShim (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationShim")' from part 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef'.
Element: Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.VCConfigurationShim (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationShim") --> Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef
Resulting in: Cannot set import 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator.VCConfiguration (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationShim")' on part 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator'.
Element: Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator.VCConfiguration (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationShim") --> Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator
Resulting in: Cannot get export 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator")' from part 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator'.
Element: Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator") --> Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator
Resulting in: Cannot set import 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.EventsTranslator (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator")' on part 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef'.
Element: Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.EventsTranslator (ContractName="Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCLegacyEventsTranslator") --> Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef
Resulting in: Cannot get export 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.VCConfigurationShim (ContractName="Microsoft.VisualStudio.ProjectSystem.ConfiguredProject.HostObject")' from part 'Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef'.
Element: Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef.VCConfigurationShim (ContractName="Microsoft.VisualStudio.ProjectSystem.ConfiguredProject.HostObject") --> Microsoft.VisualStudio.Project.VisualC.VCProjectEngine.VCConfigurationMef
At the moment only Visual Studio 2012 is supported, so issues with Visual Studio 2013 are to be expected.
There is a thread on their forums dedicated to helping with WAF problems, which includes getting it up and running with Visual Studio 2013: http://www.cryengine.com/community/viewtopic.php?f=314&t=130850
The WAF documentation is here: http://docs.cryengine.com/display/SDKDOC4/Getting+Started+with+WAF
You will find help much more quickly on the CRYENGINE forums - few users habitually check Stack Overflow for these types of questions.

Linker outfile property file does not match targetpath?

I'm trying to compile a C++ type .DLL for a SierraChart custom study.
(Which is a financial trading application.) Here is the warning I get that I need to fix so it all points to the linker output value:
warning MSB8012:
TargetPath(C:\SierraChart\VCProject\Release\SCStudies.dll) does not match the Linker's
OutputFile property value (c:\sierrachart\data\SCStudies.dll).
This may cause your project to build incorrectly. To correct this, please
make sure that $(OutDir), $(TargetName) and $(TargetExt)
property values match the value specified in %(Link.OutputFile).
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets
Any idea what's wrong?
I believe this warning appears specifically when upgrading a C++ project to VS2010. Visual Studio 2010 C++ Project Upgrade Guide describes some of the caveats encountered during an upgrade. If you're uncomfortable changing project settings, then retaining the older version of Visual Studio, may work for you.
To change the %(Link.OutputFile), open the project properties. Navigate to Configuration Properties -> Linker -> General. You can set the Output File to $(OutDir)\SCStudies.dll, which should take care of your issue. You may need to repeat the change for each Configuration/Flavor you will be building (Debug/x86, Release/x86, Debug/Itanium, etc...).
Based on this answer.
I changed the following property:
Linker -> General -> Output File to
"$(OutDir)$(TargetName)$(TargetExt)"
This prevented the warning to appear and the output was generated successfully.
The original configuration was set like:
Properties -> Linker -> General : $(OutDir)\"<'name fileA>".exe
The program tries to run "<'name_project>".exe and as result error Linked.
You need to set the configuration as:
Properties -> Linker -> General : $(OutDir)\"<'project name>".exe
A different fix which others haven't mentioned is that by default the TargetExt is .exe and for my debug builds I changed it to be _d.exe, where instead you should be doing that in the TargetName path.
The directory specified in General->Output Directory and the directory specified in the path at Linker->Output File have to match.
If you want to change the defaults do things in these order:
You first configure the OutDir in General->Output Directory. E.g.
$(SolutionDir)$(Platform)\$(Configuration)\MyProgram\
Make sure Output File is consistent. E.g. this would work
$(OutDir)\$(TargetName)$(TargetExt)
The comment from Gerardo Hernandez helped me.
The directory specified in General->Output Directory and the directory specified in the path at Linker->Output File have to match.
In my case I was importing a large project from Visual Studio 6 and
C:\Project\myproject\OneOfMyDlls\.\Debug\OneOfMyDlls.dll
was not equal to
C:\Project\myproject\Debug\OneOfMyDlls.dll
but
C:\Project\myproject\OneOfMyDlls\..\Debug\OneOfMyDlls.dll
would have been, after path reduction.
The problem was that the Visual Studio 2017 import had changed the output directory from
..\Debug to .\Debug assuming that the unconventional parent directory use was a mistake. In a large project with 13 DLLs of our own, (never mind second and third party DLLs too), it makes sense to collect all the DLLs in one place and ..\Debug was correct.
So while others might have had to change Linker->Output File, in my case it was General->Output Directory which needed to change as it had been corrupted by the import from Visual Studio 6.
Something like ..\Debug had become something like .\Debug after import. (The real project specific names have been removed .)
Looks like it's not significant for the program:
Odd Visual Studio error when following the custom study video
If, like me, you return to Visual Studio after 20 years, you may not know where the project properties are. In VS 2012: top of the screen "FILE EDIT VIEW PROJECT BUILD..." : choose PROJECT. Properties is the last item in the menu. Indeed for me there was a mismatch in the target name, too.

What are C2471,C1083 errors related to a VC2008 project and how to correct them

I had a VC2008 project very complicated.Inorder to understand it's inner workings I tried to simplify it and now I am getting 289 errors of the following type for most of the files:
Error 5 error C2471: cannot update program database 'c:\users\ryan\documents\visual studio 2008\projects\vc\myinfo\cli\debug\vc90.pdb' c:\users\ryan\documents\visual studio 2008\projects\vc\myinfo\cli\mediainfo\file__analyze_buffer_minimizesize.cpp 1 CLI
Error 6 fatal error C1083: Cannot open program database file: 'c:\users\ryan\documents\visual studio 2008\projects\vc\myinfo\cli\debug\vc90.pdb': No such file or directory c:\users\ryan\documents\visual studio 2008\projects\vc\myinfo\cli\mediainfo\file__analyze_buffer_minimizesize.cpp 1 CLI
My system : win7/VS2008
Solution 1: Locate *.vcxproj file in your solution, open in a text editor and search for 'DebugInformationFormat' and set it to 'OldStyle'.  Reload your project and build. If you have multiple projects in your solution, this change needed for all the *.vcxproj files.
< DebugInformationFormat>OldStyle< /DebugInformationFormat>
Solution 2: From Visual Studio, on every project in your solution right click and open Properties. Expand 'Configuration Properties' > 'C/C++' > 'General'. Change the 'Debug Information Format' to 'C7 compatible (/Z7)'. Then build your solution.
This worked for me. (YMMV = Your mileage may vary:)
I've seen the same behaviour when converting a VS2003.Net solution to run on later IDEs. My guess is that your solution contains multiple projects which point to the same intermediate directory. In VS2005 and later, projects that don't depend on each other can be built in parallel so that if the same working dir is used, you can get file conflicts like this.
Check this as follows. In Solution Explorer, right click on one of the failing projects and select Properties. In Configuration Properties -> General section, make sure that every project has a different 'Intermediate Directory'. Try your build again using 'Rebuild Solution' to clean everything out.
Most of the times when I get "C2471: cannot update program database" it's because the PDB file is locked for some reason. Usually in my case that turns out to be because I have the program running in some other window, which loads the PDB file in to memory.
When that's not the reason, I find doing a rebuild-all magically fixes the problem.
I've encountered the same type of error myself with no end of frustration.
I finally fixed it by applying the Microsoft hot fix found in this knowledge base article: http://archive.msdn.microsoft.com/KB946040
This worked for me.
Kill mspdbsrv.exe and reload Visual C++
MSDN
You can delete the *.obj file and rebuild the solution again, This problem might solve. Below link might be helpful for you-
https://social.msdn.microsoft.com/Forums/vstudio/en-US/0ceac3c6-62f6-4fdf-82e1-d41e1b4fcd20/vs2008-c2471-cannot-update-program-database?forum=vclanguage

VC2008 compiler errors opening sbr files (C2418 C1903 C2471)

EDIT: See my answer below for the hotfix.
ORIGINAL QUESTION:
In setting up for our boat-programming adventure I have to set up source control and fix project files for a team to use them. (the project was previously only being worked on by one person who took shortcuts with setting up the project includes, etc)
I am fixing those SLN and Proj files. When trying to do a build on an external USB drive (I have not tried it on the primary hard drive) I am getting odd errors (lots of them for various files):
fatal error C1083: Cannot open
compiler generated file:
'.\Debug\.sbr': Permission
denied
These files are referenced in the vcproj file with relative paths in double quotes:
RelativePath="..\..\Source\.cpp"
I get the same errors form within a sln file in the IDE or if I call msbuild with the sln file.
The files are kind of "shared" for a few sln files (projects).
The person who originally created the SLN files is not known for being a wizard at configuring MSDev or making things work for teams.
Is this an issue with the way the source files are referenced? Any suggestions on how to fix these?
This URL does not seem to have helpful information:
Fatal Error C1083 on MSDN
Note - there were/are still hardcoded paths in the proj file, but i don;t see them for these files. They were mostly for the include and lib dirs. I think I removed them all.
I also get these errors:
..\..\Source\.cpp : error C2471:
cannot update program database '\debug\vc90.pdb'
..\..\Source\.cpp(336) : fatal
error C1903: unable to recover from
previous error(s); stopping
compilation
..\..\Source\.cpp(336) : error
C2418: cannot delete browser file:
.\Debug\.sbr
Title: You may receive a "PRJ0008" or "C2471" or "C1083" or "D8022" or "LNK1103" or similar error message when you try to build a solution in Visual C++
Symptoms:
D8022 : Cannot open 'RSP00000215921192.rsp'
PRJ0008 : Could not delete file 'vc90.idb'.
C1083 : Cannot open program database file 'vc90.pdb'
C2471 : Cannot update program database 'vc90.pdb'
LNK1103 : debugging information corrupt.
Cause:
This problem occurs when all of the following conditions are true:
You have a solution with more than one project in it.
Two or more of the projects are not dependent on each other.
You have parallel builds enabled. (Tools -> Options: Projects and Solutions, Build and Run: "maximum number of parallel project builds" is set to a value greater than 1)
You are building on a system with multiple CPUs (cores).
Two or more of the non-dependent projects are configured to use the same Intermediate and/or Output directory.
A specific race condition in mspdbsrv.exe remains uncorrected.
Resolution:
To resolve the problem do one or more of the following:
Reconfigure the non-dependent projects to specify an Intermediate and Output directory that is different from one another, e.g. Output Directory = "$(SolutionDir)$(ProjectName)\$(ConfigurationName)", Intermediate Directory = "$(OutDir)".
Adjust your solution's project dependencies (Project -> Project Dependencies...) so that each is dependent on another.
Disable parallel builds.
Add the "/onecpu" boot option to your boot.ini file.
Change you BIOS settings to enable/use only one CPU.
File a problem report with Microsoft Technical Support and keep bugging the crap out of them until they eventually fix mspdbsrv.
Status:
The problem is a combination of both a user project configuration error as well as a race condition in Microsoft's "mspdbsrv.exe" utility that does not properly handle more than one thread calling it at the same time for the same file resulting in the file's HANDLE being left open.
Additionally Visual Studio itself and/or its build system (VCBUILD and/or MSBUILD) (or all three!) should be made smart enough to detect and alert the user of such user errors so that corrective action can be taken.
This problem has been around for a LOOOOOONG time.
Applies to:
Microsoft Visual C++ 2005
Microsoft Visual C++ 2008
Others?
Respectfully submitted:
"Fish" (David B. Trout)
fish#infidels.org
p.s:
You're welcome. :)
Hmmm.
Perhaps:
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/0ceac3c6-62f6-4fdf-82e1-d41e1b4fcd20/
there is a hotfix from MS
http://code.msdn.microsoft.com/KB946040
http://support.microsoft.com/kb/946040
That might be my problem. I think it might only be on one machine I have.
EDIT:
I downloaded and ran the hotfix installer. It seems to have fixed it.
I get this same error when I physically remove a file from disk, but leave it in VS. In VS2005 it would give a much better : fatal error file not found. I think this is a bug in VS2008. The hotfix mentioned above didn't help me.
In my case it was my virus package (Trend Micro) causing all the problems. I added my Dev folders to the Ignore/White lists to solve the problem
delete your debug folder and build your project agian.
Occastionally my Visual Studio will suddenly decide something like this. I have found it maybe help to toggle to release, do a full rebuild, then toggle back to debug.