C++ 未定义符号-符号查找错误
我正在尝试用Eclipse编译SFML2.0教程。该程序编译得很好,但运行时出现以下错误: /home/eXistys/workspace/SFML/Debug/SFML:符号查找错误:/home/eXistys/workspace/SFML/Debug/SFML:未定义的符号:_ZN2sf12RenderStates7DefaultEC++ 未定义符号-符号查找错误,c++,linux,eclipse,sfml,C++,Linux,Eclipse,Sfml,我正在尝试用Eclipse编译SFML2.0教程。该程序编译得很好,但运行时出现以下错误: /home/eXistys/workspace/SFML/Debug/SFML:符号查找错误:/home/eXistys/workspace/SFML/Debug/SFML:未定义的符号:_ZN2sf12RenderStates7DefaultE 在GCC C++编译器>中,我有: /home/eXistys/SFML/include 和GCC C++链接器下的i:< /P> `sfml图形 `sf
在GCC C++编译器>中,我有:
/home/eXistys/SFML/include
- `sfml图形
- `sfml窗口
- `sfml系统
#包括
int main()
{
sf::RenderWindow窗口(sf::VideoMode(300200),“SFML工作!”;
sf::Text Text(“Hello-SFML”);
while(window.isOpen())
{
sf::事件;
while(window.pollEvent(事件))
{
如果(event.type==sf::event::Closed)
window.close();
}
window.clear();
窗口。绘制(文本);
window.display();
}
返回0;
}
我从这里下载了SFML 2.0的最新快照:
亲切问候,您缺少的是
sf::RenderStates::Default
。它在RenderStates.cpp中声明,RenderStates.cpp应该是sfml图形的一部分。您确定sfml图形正在链接到您的程序吗?rpath设置是否正确?我假设您正在构建可执行程序,而不是共享库,对吗?您是否尝试过执行LD_PRELOAD=/path/to/sfml graphics/lib.so/path/to/program
您是否已将sfml库添加到eclipse中的项目选项中?是的,我已添加。在GCC C++编译器>中,我有/home /sIs/sfLM//GCC C++链接器,我有/home /sIys/sfML/SFML2Buff/LIB和SFML图形,SFML窗口,SFML系统,按顺序执行。我得到以下信息:eXistys@linux-djdf:~>LD_PRELOAD=/home/eXistys/SFML/sfml2 build/lib/libsfml-graphics.so/home/eXistys/workspace/SFML/SFML/home/eXistys/workspace/SFML/Debug/SFML:符号查找错误:/home/eXistys/SFML/sfml2 build/lib/libsfml-graphics.so:未定义符号:_ZN2sf6Window6createENS\u 9VideoModeerksjrkns\u 15ContextSettingSeal所以,我确信我正确链接了sfml图形。不过,我不知道您对rpath是什么意思。显然,您对sfml库的理解不正确。现在您缺少sfml窗口。请发布来自Eclipse(如果可用)的ldd/path/to/program
和链接命令的结果。您已链接到位于/usr/lib64/中的SFML库,而您更希望从/home/eXistys/SFML/获得一个。这两个版本之间是否匹配?eclipse中应该有C-Build视图和原始编译器输出,您可以发布内容吗?
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(300, 200), "SFML works!");
sf::Text text("Hello SFML");
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(text);
window.display();
}
return 0;
}