Note: This page may be outdated. A new version of Panda3D has been released since this page was written which fully compiles now with VC8.
Microsoft Visual Studio is a well-known programming environment and compiler.
It is possible to create C++ Panda3D projects using Microsoft Visual Studio, but it's not easy to setup everything.
On this page will be explained how to compile pview, a Panda3D application which is shipped with Panda3D by default.
Assuming that $PANDADIR refers to the unpacked archive, pview can be found in the directory $PANDADIR/panda/src/testbed.
You must choose the include and libraries directories according to your compiler. For example under Windows with VisualStudio :
Include dirs
$PANDADIR\include
$PANDADIR\thirdparty\win-python\include
$PANDADIR\thirdparty\win-libs-vc7\nspr\include
Library directories
$PANDADIR\lib
$PANDADIR\thirdparty\win-libs-vc7\nspr\lib
$PANDADIR\thirdparty\win-python\libs
If you don't have the thirdparty files, you can download them from the Downloads section.
With VisualStudio 8, these additional preprocessors definitions are needed : WIN32;NDEBUG;_CONSOLE;WIN32_VC
(Note: Some users reported that, if NDEBUG doesn't work, you should try _DEBUG instead.)
A complete VS8 project can be found here. The archive has to be unzipped to $PANDADIR/samples/
Tutorial
(This tutorial was made by aaronbstjohn.)
You should now have everything you need to get started.
- Launch Visual Studio and start a new project.
- I made my project a standard win32 console application and started an "empty project".
- Add pview.cxx to your project
- I just copied it to my project folder and then added it to the project the usual way.
- You can do this in your project properties for each panda project:
-
- For include files go to:
- Project>Properties>C++>General>Additional Include Directories
-
- and add: "C:\Panda3D-1.3.2\include"
- and "C:\Panda3D-1.3.2\thirdparty\win-libs-vc7\nspr\include"
- and "C:\Panda3D-1.3.2\thirdparty\win-python\include"
-
- For libs go to:
- Project>Properties>Linker>General>Additional Library Directories
-
- add "C:\Panda3D-1.3.2\lib"
- and "C:\Panda3D-1.3.2\thirdparty\win-libs-vc7\nspr\lib"
- and "C:\Panda3D-1.3.2\thirdparty\win-python\libs"
-
- or if you're lazy (I am) put it in your global VS environment path.
-
- Go To: Tools>Options>Projects>VC++ Directories
- add the above paths to your Include and Library Directories respectively
-
- Link to the panda libraries:
- under:
- Project>Properties>Linker>Input
- add:
- libpanda.lib libpandaexpress.lib libframework.lib libdtool.lib :libdtoolconfig.lib
-
- Compile & Run, you're DONE !
- Just kidding, you're not done, but you should try it to see what happens. This is how far I got before things got tricky.
-
- Note: I'm compiling in Debug mode by default. Everything below should also work for Release mode. I was able to do both.
Error #1 : Python Debug Library issues
"LINK : fatal error LNK1104: cannot open file 'python24_d.lib'"
Problem: Panda doesn't come w/the debug lib for python. Neither does the regular python distribution. As far as I can tell you have to go compile all of python in debug mode for the privilege of debugging into python. Not something I cared to do.
Solution: Link agains the release version of Python instead of the debug version.
Go to: Project>Properties>Linker>Input and add "python24_d.lib" to your "Ignore Specific Library" section.
Then add "python24.lib" to your list of "Additional Dependencies"
Kiss your option of debugging into python good bye!
Error #2: Angry Linker
Linking...
pview.obj : error LNK2001: unresolved external symbol "void * (__cdecl* global_operator_new)(unsigned int)"
(?global_operator_new@@3P6APAXI@ZA)
pview.obj : error LNK2001: unresolved external symbol "void (__cdecl* global_operator_delete)(void *)"
(?global_operator_delete@@3P6AXPAX@ZA)
pview.obj : error LNK2001: unresolved external symbol _gnu_optind
pview.obj : error LNK2001: unresolved external symbol _gnu_optarg
etc...
Problem: Who knows (most likely internal panda stuff)
Solution: Add the preproccesor flag "WIN32_VC"
Go to: Project>Properties>C/C++/Preprocessor and add WIN32_VC to your list of preprocessor directives.
For me this line looks like: WIN32;_DEBUG;_CONSOLE;WIN32_VC
If the error is still not fixed, try replacing _DEBUG with NDEBUG.
Error #3: Angry Linker Part 2
Linking...
libcpd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __malloc_dbg
referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)"
(??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) libcpd.lib(_tolower.obj) : error LNK2001: unresolved external symbol __malloc_dbg
libcpd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __free_dbg
referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)"
(??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)
Problem: Panda apps need to be multithreaded
Solution: Go to: Project>Properties>C/C++>Code Generation and
change "Runtime Library" from "Single-threaded (/ML)" to "Multi-threaded DLL (/MD)"
- Compile & Run, you're DONE FOR REAL!!!
No Really, you're done. At this point you should have the basic pview app compiled and running in VS using only the libs that come w/the standard panda install and the third party libs provided on the panda site. You should now be able to use pview as a jumping off point for developing full C++ only panda apps using Visual Studio.
|