【发布时间】:2015-03-30 12:55:45
【问题描述】:
我在使用 SFML 的 cmake 和 Visual Studio 2013 时遇到问题。当我尝试编译我的程序时,我得到了所有使用 SFML 的未解决的外部问题。我在多台机器上遇到了这个问题,在某些情况下也遇到了其他一些库。
我正在使用以下命令生成我的 Visual Studio 项目(在 VisualStudioProject 文件夹中):
Z:/Coding/cmake/cmake-3.1.1-win32-x86/bin/cmake.exe -G "Visual Studio 12" ..
这是我的 CMakeLists.txt(它实际上是从我编写的 python 脚本生成的,但我怀疑这很重要)。我可以确认所有库都已正确找到。
cmake_minimum_required (VERSION 2.6)
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/lib )
project(Game)
include_directories( Z:/Coding/Libraries/SFML/SFML-2.2/include Z:/Coding/Game/src/win32 Z:/Coding/Game/src )
find_library( SFML-GRAPHICS NAMES sfml-graphics PATHS Z:/Coding/Libraries/SFML/SFML-2.2/lib NO_DEFAULT_PATH )
find_library( SFML-WINDOW NAMES sfml-window PATHS Z:/Coding/Libraries/SFML/SFML-2.2/lib NO_DEFAULT_PATH )
find_library( SFML-SYSTEM NAMES sfml-system PATHS Z:/Coding/Libraries/SFML/SFML-2.2/lib NO_DEFAULT_PATH )
add_executable( win32 "Z:/Coding/Game/apps/win32.cpp" )
target_link_libraries( win32 ${SFML-GRAPHICS} ${SFML-WINDOW} ${SFML-SYSTEM} )
这是我的简单 SFML 测试程序:
#include <string>
#include <iostream>
#include <SFML/Graphics.hpp>
using namespace std;
int main(int argc, char *argv[])
{
sf::RenderWindow window;
window.create(sf::VideoMode(1280, 1024), "Test");
while (true)
{
sf::Event ev;
while (window.pollEvent(ev))
{
if (ev.type = sf::Event::EventType::Closed)
{
window.close();
exit(1);
}
}
}
std::string hello = "Hello";
cout << hello << endl;
}
我得到以下未解决的外部问题:
错误 1 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) 公共:__thiscall sf::String::String(char const *,class std::locale const &)" (__imp_??0String@sf@@QAE@PBDABVlocale@std@@@Z) 在函数中引用 _main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 2 错误 LNK2019:无法解析的外部符号 “__declspec(dllimport) public: __thiscall sf::String::~String(void)” (__imp_??1String@sf@@QAE@XZ) 在函数中引用 _main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 3 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) 公共:__thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (__imp_??0VideoMode@sf@@QAE@III@Z) 在函数中引用 _main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 4 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) 公共:无效 __thiscall sf::Window::create(类 sf::VideoMode,类 sf::String const &,unsigned int,struct sf::ContextSettings const &)" (__imp_?create@Window@sf@@QAEXVVideoMode@2@ABVString@2@IABUContextSettings@2@@Z) 在函数中引用 _main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 5 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) 公共:无效 __thiscall sf::Window::close(void)" (__imp_?close@Window@sf@@QAEXXZ) 引用 在函数_main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 6 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) public: bool __thiscall sf::Window::pollEvent(类 sf::Event &)" (__imp_?pollEvent@Window@sf@@QAE_NAAVEvent@2@@Z) 中引用 函数_main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 7 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) 公共:__thiscall sf::RenderWindow::RenderWindow(void)" (__imp_??0RenderWindow@sf@@QAE@XZ) 在函数中引用 _main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 8 错误 LNK2019:无法解析的外部符号 "__declspec(dllimport) 公共:虚拟 __thiscall sf::RenderWindow::~RenderWindow(void)" (__imp_??1RenderWindow@sf@@UAE@XZ) 在函数中引用 _main Z:\Coding\Game\VisualStudioProject\win32.obj win32
错误 9 错误 LNK1120: 8 未解决 外部 Z:\Coding\Game\bin\Debug\win32.exe win32
我过去曾在 Windows 上成功使用过与 SFML 相同的脚本样式(至少我记得我有),所以我认为这是 VS 2013 的新事物,但我完全被难住了.
提前致谢。
注意:这是一个简单的示例。这种风格的 CMakeLists.txt 是由脚本生成的,因为它使用的主要代码库非常大(最初基于 Linux,因此到处都使用 '/')。
【问题讨论】:
标签: c++ visual-studio-2013 cmake sfml unresolved-external