在 VS2013 下构建项目仅在手动编译每个 *.cpp 时有效
Building project under VS2013 works only when each *.cpp's are compiled manually
我正在尝试在 VisualStudio 2013 中编译 Ogre Wiki Tutorial Framework 1.9 - (Windows line endings)。右键单击 OgreFramework
项目并选择 Rebuild
returns 以下错误:
Error 487 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::windowClosed(class Ogre::RenderWindow *)" (?windowClosed@BaseApplication@@MAEXPAVRenderWindow@Ogre@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 488 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::windowResized(class Ogre::RenderWindow *)" (?windowResized@BaseApplication@@MAEXPAVRenderWindow@Ogre@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 489 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::mouseReleased(class OIS::MouseEvent const &,enum OIS::MouseButtonID)" (?mouseReleased@BaseApplication@@MAE_NABVMouseEvent@OIS@@W4MouseButtonID@3@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 490 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::mousePressed(class OIS::MouseEvent const &,enum OIS::MouseButtonID)" (?mousePressed@BaseApplication@@MAE_NABVMouseEvent@OIS@@W4MouseButtonID@3@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 491 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::mouseMoved(class OIS::MouseEvent const &)" (?mouseMoved@BaseApplication@@MAE_NABVMouseEvent@OIS@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 492 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::keyReleased(class OIS::KeyEvent const &)" (?keyReleased@BaseApplication@@MAE_NABVKeyEvent@OIS@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 493 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::keyPressed(class OIS::KeyEvent const &)" (?keyPressed@BaseApplication@@MAE_NABVKeyEvent@OIS@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 494 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::frameRenderingQueued(struct Ogre::FrameEvent const &)" (?frameRenderingQueued@BaseApplication@@MAE_NABUFrameEvent@Ogre@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 495 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::loadResources(void)" (?loadResources@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 496 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createResourceListener(void)" (?createResourceListener@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 497 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::setupResources(void)" (?setupResources@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 498 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createViewports(void)" (?createViewports@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 499 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::destroyScene(void)" (?destroyScene@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 500 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createFrameListener(void)" (?createFrameListener@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 501 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createCamera(void)" (?createCamera@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 502 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::chooseSceneManager(void)" (?chooseSceneManager@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 503 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::configure(void)" (?configure@BaseApplication@@MAE_NXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 504 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::setup(void)" (?setup@BaseApplication@@MAE_NXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 505 error LNK2001: unresolved external symbol "public: virtual void __thiscall BaseApplication::go(void)" (?go@BaseApplication@@UAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 506 error LNK2001: unresolved external symbol "public: virtual __thiscall BaseApplication::~BaseApplication(void)" (??1BaseApplication@@UAE@XZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 507 error LNK2001: unresolved external symbol "public: __thiscall BaseApplication::BaseApplication(void)" (??0BaseApplication@@QAE@XZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 508 error LNK1120: 21 unresolved externals C:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\Release\OgreFramework.exe OgreFramework
但是当我这样做时它起作用了:
右键单击 BaseApplication.cpp
文件并选择 Compile:
1>------ Build started: Project: OgreFramework, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Release\) contains files shared from another project (OgreTest.vcxproj, OgreTiny.vcxproj). This can lead to incorrect clean and rebuild behavior.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of BaseApplication.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files involved are aruco\BaseApplication.cpp, BaseApplication.cpp.
1> BaseApplication.cpp
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
右键单击 TutorialApplication.cpp
文件并选择 Compile
:
1>------ Build started: Project: OgreFramework, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Release\) contains files shared from another project (OgreTest.vcxproj, OgreTiny.vcxproj). This can lead to incorrect clean and rebuild behavior.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of BaseApplication.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files involved are aruco\BaseApplication.cpp, BaseApplication.cpp.
1> TutorialApplication.cpp
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
右键单击 OgreFramework
项目并选择 Build
1>------ Build started: Project: OgreFramework, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Release\) contains files shared from another project (OgreTest.vcxproj, OgreTiny.vcxproj). This can lead to incorrect clean and rebuild behavior.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of BaseApplication.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files involved are aruco\BaseApplication.cpp, BaseApplication.cpp.
1>Release\BaseApplication.obj : warning LNK4042: object specified more than once; extras ignored
1> Generating code
1> Finished generating code
1> OgreFramework.vcxproj -> C:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\Release\OgreFramework.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
两个 *.h 文件都已设置 Configuration Properties -> General -> Item Type
显示:C/C++ header
两个 *.cpp 文件都已设置 Configuration Properties -> General -> Item Type
显示:C/C++ compiler
我已尝试按照 this post 中所述删除 *.h
文件并将其添加到项目中,但我遇到了同样的错误。提到的 post 还说可以在某些日志中找到这些错误,但我找不到。谢谢
编辑:
BaseApplication.cpp or TutorialApplication.cpp -> Right click -> Properties -> Configuration Properties -> C/C++ -> Output Files -> Object File Name
显示:$(IntDir)
OgreFramework project -> Right click -> Properties -> Configuration Properties -> C/C++ -> General -> Additional Include Directories -> <edit> -> Macros -> $(IntDir)
显示:
Debug\
问题已解决。我还包含在一个解决方案资源管理器过滤器中,其中包含 BaseApplication.cpp
和 BaseApplication.cpp
的其他版本(因为我复制了项目而不是创建新项目),这导致覆盖了我原来的 BaseApplication.cpp
和 BaseApplication.h
。所有功劳归功于@HansPassant。
我正在尝试在 VisualStudio 2013 中编译 Ogre Wiki Tutorial Framework 1.9 - (Windows line endings)。右键单击 OgreFramework
项目并选择 Rebuild
returns 以下错误:
Error 487 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::windowClosed(class Ogre::RenderWindow *)" (?windowClosed@BaseApplication@@MAEXPAVRenderWindow@Ogre@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 488 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::windowResized(class Ogre::RenderWindow *)" (?windowResized@BaseApplication@@MAEXPAVRenderWindow@Ogre@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 489 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::mouseReleased(class OIS::MouseEvent const &,enum OIS::MouseButtonID)" (?mouseReleased@BaseApplication@@MAE_NABVMouseEvent@OIS@@W4MouseButtonID@3@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 490 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::mousePressed(class OIS::MouseEvent const &,enum OIS::MouseButtonID)" (?mousePressed@BaseApplication@@MAE_NABVMouseEvent@OIS@@W4MouseButtonID@3@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 491 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::mouseMoved(class OIS::MouseEvent const &)" (?mouseMoved@BaseApplication@@MAE_NABVMouseEvent@OIS@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 492 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::keyReleased(class OIS::KeyEvent const &)" (?keyReleased@BaseApplication@@MAE_NABVKeyEvent@OIS@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 493 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::keyPressed(class OIS::KeyEvent const &)" (?keyPressed@BaseApplication@@MAE_NABVKeyEvent@OIS@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 494 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::frameRenderingQueued(struct Ogre::FrameEvent const &)" (?frameRenderingQueued@BaseApplication@@MAE_NABUFrameEvent@Ogre@@@Z) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 495 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::loadResources(void)" (?loadResources@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 496 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createResourceListener(void)" (?createResourceListener@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 497 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::setupResources(void)" (?setupResources@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 498 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createViewports(void)" (?createViewports@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 499 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::destroyScene(void)" (?destroyScene@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 500 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createFrameListener(void)" (?createFrameListener@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 501 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::createCamera(void)" (?createCamera@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 502 error LNK2001: unresolved external symbol "protected: virtual void __thiscall BaseApplication::chooseSceneManager(void)" (?chooseSceneManager@BaseApplication@@MAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 503 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::configure(void)" (?configure@BaseApplication@@MAE_NXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 504 error LNK2001: unresolved external symbol "protected: virtual bool __thiscall BaseApplication::setup(void)" (?setup@BaseApplication@@MAE_NXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 505 error LNK2001: unresolved external symbol "public: virtual void __thiscall BaseApplication::go(void)" (?go@BaseApplication@@UAEXXZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 506 error LNK2001: unresolved external symbol "public: virtual __thiscall BaseApplication::~BaseApplication(void)" (??1BaseApplication@@UAE@XZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 507 error LNK2001: unresolved external symbol "public: __thiscall BaseApplication::BaseApplication(void)" (??0BaseApplication@@QAE@XZ) c:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\OgreFramework\TutorialApplication.obj OgreFramework
Error 508 error LNK1120: 21 unresolved externals C:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\Release\OgreFramework.exe OgreFramework
但是当我这样做时它起作用了:
右键单击 BaseApplication.cpp
文件并选择 Compile:
1>------ Build started: Project: OgreFramework, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Release\) contains files shared from another project (OgreTest.vcxproj, OgreTiny.vcxproj). This can lead to incorrect clean and rebuild behavior.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of BaseApplication.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files involved are aruco\BaseApplication.cpp, BaseApplication.cpp.
1> BaseApplication.cpp
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
右键单击 TutorialApplication.cpp
文件并选择 Compile
:
1>------ Build started: Project: OgreFramework, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Release\) contains files shared from another project (OgreTest.vcxproj, OgreTiny.vcxproj). This can lead to incorrect clean and rebuild behavior.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of BaseApplication.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files involved are aruco\BaseApplication.cpp, BaseApplication.cpp.
1> TutorialApplication.cpp
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
右键单击 OgreFramework
项目并选择 Build
1>------ Build started: Project: OgreFramework, Configuration: Release Win32 ------
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(388,5): warning MSB8028: The intermediate directory (Release\) contains files shared from another project (OgreTest.vcxproj, OgreTiny.vcxproj). This can lead to incorrect clean and rebuild behavior.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppBuild.targets(942,5): warning MSB8027: Two or more files with the name of BaseApplication.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files involved are aruco\BaseApplication.cpp, BaseApplication.cpp.
1>Release\BaseApplication.obj : warning LNK4042: object specified more than once; extras ignored
1> Generating code
1> Finished generating code
1> OgreFramework.vcxproj -> C:\Users\wakatana\Documents\Visual Studio 2013\Projects\OgreFramework\Release\OgreFramework.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
两个 *.h 文件都已设置 Configuration Properties -> General -> Item Type
显示:C/C++ header
两个 *.cpp 文件都已设置 Configuration Properties -> General -> Item Type
显示:C/C++ compiler
我已尝试按照 this post 中所述删除 *.h
文件并将其添加到项目中,但我遇到了同样的错误。提到的 post 还说可以在某些日志中找到这些错误,但我找不到。谢谢
编辑:
BaseApplication.cpp or TutorialApplication.cpp -> Right click -> Properties -> Configuration Properties -> C/C++ -> Output Files -> Object File Name
显示:$(IntDir)
OgreFramework project -> Right click -> Properties -> Configuration Properties -> C/C++ -> General -> Additional Include Directories -> <edit> -> Macros -> $(IntDir)
显示:
Debug\
问题已解决。我还包含在一个解决方案资源管理器过滤器中,其中包含 BaseApplication.cpp
和 BaseApplication.cpp
的其他版本(因为我复制了项目而不是创建新项目),这导致覆盖了我原来的 BaseApplication.cpp
和 BaseApplication.h
。所有功劳归功于@HansPassant。