您好我正在使用msVS ++ 2010并且一直在尝试设置SFML .... 我下载了1.6从网站,然后重建它在VS2010,却悲哀地发现,这并不会导致SFML系统-d.lib文件,这是我所习惯使用仅生产新系统-S和system-sd libs。
然后我密切关注这个Video,发现他通过添加sfml-system-sd的外部库来运行他的测试代码,所以我在.exe后添加了sfml-system-d.dll并得到了视频显示以下完全相同的代码:
#include <iostream>
#include <SFML/System.hpp>
int main(int argc, char **argv)
{
sf::Clock clock;
sf::Sleep(0.1f);
while(clock.GetElapsedTime() < 5.0f)
{
std::cout << clock.GetElapsedTime() << std::endl;
sf::Sleep(0.5f);
}
}
显然,时钟和睡眠都在工作,但是当我添加简单的代码行'sf :: Thread thread();'弹出一个错误框,说“无法启动程序”,“配置不正确”,“查看清单文件中是否存在可能的错误”,“重新安装我的修复程序”。
另外:当尝试运行有关线程的教程的第一个程序时:
#include <SFML/System.hpp>
#include <iostream>
void ThreadFunction(void* UserData)
{
// Print something...
for (int i = 0; i < 10; ++i)
std::cout << "I'm the thread number 1" << std::endl;
}
int main()
{
// Create a thread with our function
sf::Thread Thread(&ThreadFunction);
// Start it !
Thread.Launch();
// Print something...
for (int i = 0; i < 10; ++i)
std::cout << "I'm the main thread" << std::endl;
return EXIT_SUCCESS;
}
我得到了8个这样的外部符号:
1>sfml-system-s-d.lib(Thread.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: int __thiscall std::ios_base::width(int)" (__imp_?width@ios_base@std@@QAEHH@Z)
fatal error LNK1120: 8 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
最后,这就是我的项目设置方式:
答案 0 :(得分:2)
在构建SFML 时,您可能不会链接到CRT。 (ios_width是iostream,需要CRT库。)
您需要重建SFML,除非这次执行以下操作:
<强> 0。复制这个库列表
KERNEL32.LIB
USER32.LIB
GDI32.LIB
winspool.lib
comdlg32.lib
advapi32.lib
SHELL32.LIB
ole32.lib
oleaut32.lib
UUID.LIB
odbc32.lib
odbccp32.lib
进入每个人
个人项目的Properties ->
Configuration -> Linker -> Input
。
或者,如果它没有'链接器'去
进入Properties -> Configuration ->
Librarian
。
将“忽略默认库”设置为 “不”,它可能会起作用
如果您想要100%安全,请单击其他依赖项,展开它,然后单击“编辑”。现在只需粘贴上面的库
如果您在“图书管理员”标签中,请设置 链接库依赖关系为是
每次重复步骤1-4 更改Debug的构建设置 DLL,Debug static等
当我重新编译SFML(授予时,我有一个静态编译,因为1.6是1.x行的最后一行,而2.0不兼容;))我不得不添加这些引用。它将忽略(并“警告”忽略)它不需要的任何东西,但它们是默认值;)
不幸的是,您需要更新SFML解决方案中的所有内容,因为如果我没记错的话,它们都缺少默认库。