Hello!
I've managed to clone SFML git repo, then build with CMake and compile together with examples. All examples are working, no errors were detected. Then, I wrote a simple HelloWorld project using locally-built SFML lib, but when I compile it, I get 10 unresolved externals. All of them refer to system-specific functions implemented in sf::priv namespace. Could you help me to fix it? I have no clues what's wrong...
My environment: Windows 10, CMake 3.14.1, MSVC 16 2019.
My folder structure:
* cloned SFML project: D:\Work\SFML ;
* HelloWorld project: D:\Work\TestSFML ;
* content of TestSFML folder: CMakeLists.txt, Initialize3rdparty.sh (copies SFML lib and headers), src\HelloWorld\main.cpp .
CMakeLists.txt:
cmake_minimum_required ( VERSION 2.8 )
project (TestSFML)
set ( EXECUTABLE_NAME HelloWorld )
file ( GLOB SOURCE_FILES "src/${EXECUTABLE_NAME}/*.cpp" )
file ( GLOB HEADER_FILES "src/${EXECUTABLE_NAME}/*.h" )
add_executable ( ${EXECUTABLE_NAME} ${SOURCE_FILES} ${HEADER_FILES} )
set_target_properties ( ${EXECUTABLE_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin )
target_include_directories ( ${EXECUTABLE_NAME}
PUBLIC 3rdparty/SFML/include
)
target_link_libraries( ${EXECUTABLE_NAME}
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Debug/sfml-audio-s-d.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Release/sfml-audio-s.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Debug/sfml-graphics-s-d.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Release/sfml-graphics-s.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Debug/sfml-main-d.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Release/sfml-main.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Debug/sfml-network-s-d.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Release/sfml-network-s.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Debug/sfml-system-s-d.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Release/sfml-system-s.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Debug/sfml-window-s-d.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/lib/Release/sfml-window-s.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/flac.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/flac.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/freetype.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/freetype.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/ogg.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/ogg.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/openal32.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/openal32.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/vorbis.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/vorbis.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/vorbisenc.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/vorbisenc.lib
debug ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/vorbisfile.lib optimized ${PROJECT_SOURCE_DIR}/3rdparty/SFML/extlib/vorbisfile.lib
)
add_definitions ( -D SFML_STATIC )
add_definitions ( -D _CRT_SECURE_NO_DEPRECATE )
add_definitions ( -D _SCL_SECURE_NO_WARNINGS )
Initialize3rdparty.sh:
PATH_TO_SFML="../SFML"
mkdir 3rdparty
mkdir 3rdparty/SFML
mkdir 3rdparty/SFML/include
cp -R $PATH_TO_SFML/include/. 3rdparty/SFML/include/
mkdir 3rdparty/SFML/lib
cp -R $PATH_TO_SFML/build/lib/. 3rdparty/SFML/lib/
mkdir 3rdparty/SFML/extlib
cp -R $PATH_TO_SFML/extlibs/libs-msvc/x64/. 3rdparty/SFML/extlib/
src\HelloWorld\main.cpp:
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(640, 480), "SFML Application");
sf::CircleShape shape;
shape.setRadius(40.f);
shape.setPosition(100.f, 100.f);
shape.setFillColor(sf::Color::Cyan);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
}
MSVC build output:
1>------ Build started: Project: HelloWorld, Configuration: Release x64 ------
1>main.cpp
1>D:\Work\TestSFML\3rdparty\SFML\include\SFML/Config.hpp(44,1): warning C4005: 'SFML_SYSTEM_WINDOWS': macro redefinition
1>D:\Work\TestSFML\src\HelloWorld\main.cpp : message : see previous definition of 'SFML_SYSTEM_WINDOWS'
1>sfml-window-s.lib(WglContext.obj) : error LNK2019: unresolved external symbol __imp_wglCreateContext referenced in function "private: void __cdecl sf::priv::WglContext::createContext(class sf::priv::WglContext *)" (?createContext@WglContext@priv@sf@@AEAAXPEAV123@@Z)
1>sfml-window-s.lib(WglContext.obj) : error LNK2019: unresolved external symbol __imp_wglDeleteContext referenced in function "public: virtual __cdecl sf::priv::WglContext::~WglContext(void)" (??1WglContext@priv@sf@@UEAA@XZ)
1>sfml-window-s.lib(WglContext.obj) : error LNK2019: unresolved external symbol __imp_wglGetProcAddress referenced in function "public: static void (__cdecl*__cdecl sf::priv::WglContext::getFunction(char const *))(void)" (?getFunction@WglContext@priv@sf@@SAP6AXXZPEBD@Z)
1>sfml-window-s.lib(WglContext.obj) : error LNK2019: unresolved external symbol __imp_wglMakeCurrent referenced in function "public: virtual __cdecl sf::priv::WglContext::~WglContext(void)" (??1WglContext@priv@sf@@UEAA@XZ)
1>sfml-window-s.lib(WglContext.obj) : error LNK2019: unresolved external symbol __imp_wglShareLists referenced in function "private: void __cdecl sf::priv::WglContext::createContext(class sf::priv::WglContext *)" (?createContext@WglContext@priv@sf@@AEAAXPEAV123@@Z)
1>sfml-window-s.lib(JoystickImpl.obj) : error LNK2019: unresolved external symbol __imp_joyGetPosEx referenced in function "public: static void __cdecl sf::priv::JoystickImpl::initialize(void)" (?initialize@JoystickImpl@priv@sf@@SAXXZ)
1>sfml-window-s.lib(JoystickImpl.obj) : error LNK2019: unresolved external symbol __imp_joyGetDevCapsW referenced in function "public: bool __cdecl sf::priv::JoystickImpl::open(unsigned int)" (?open@JoystickImpl@priv@sf@@QEAA_NI@Z)
1>sfml-system-s.lib(SleepImpl.obj) : error LNK2019: unresolved external symbol __imp_timeGetDevCaps referenced in function "void __cdecl sf::priv::sleepImpl(class sf::Time)" (?sleepImpl@priv@sf@@YAXVTime@2@@Z)
1>sfml-system-s.lib(SleepImpl.obj) : error LNK2019: unresolved external symbol __imp_timeBeginPeriod referenced in function "void __cdecl sf::priv::sleepImpl(class sf::Time)" (?sleepImpl@priv@sf@@YAXVTime@2@@Z)
1>sfml-system-s.lib(SleepImpl.obj) : error LNK2019: unresolved external symbol __imp_timeEndPeriod referenced in function "void __cdecl sf::priv::sleepImpl(class sf::Time)" (?sleepImpl@priv@sf@@YAXVTime@2@@Z)
1>D:\Work\TestSFML\bin\Release\HelloWorld.exe : fatal error LNK1120: 10 unresolved externals
1>Done building project "HelloWorld.vcxproj" -- FAILED.
2>------ Skipped Build: Project: ALL_BUILD, Configuration: Release x64 ------
2>Project not selected to build for this solution configuration
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 1 skipped ==========
Thanks!