尝试编译使用 SFML 库的 c++ 项目时出现未定义的引用错误

Undefined reference errors are coming when trying to compile a c++ project that uses SFML library

提问人:anonymous 提问时间:6/7/2015 最后编辑:anonymous 更新时间:7/30/2016 访问量:1545

问:

我在 linux 中编译简单程序时遇到了一些问题:-

#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear();
        window.display();
    }

    return 0;
}

当我尝试从终端(或IDE)编译此程序时,这些未定义的引用错误即将到来:-

/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_action@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_list_entry_get_next@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_list_entry_get_name@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_enumerate_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_new@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_receive_device@LIBUDEV_183'
/usr/local/lib/libsfml-graphics.so: undefined reference to `std::__throw_out_of_range_fmt(char const*, ...)@GLIBCXX_3.4.20'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_devnode@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_enable_receiving@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_enumerate_new@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_get_fd@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_unref@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_property_value@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_filter_add_match_subsystem_devtype@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_enumerate_get_list_entry@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_enumerate_scan_devices@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_enumerate_add_match_subsystem@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_syspath@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_sysattr_value@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_monitor_new_from_netlink@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_new_from_syspath@LIBUDEV_183'
/usr/local/lib/libsfml-window.so: undefined reference to `udev_device_get_parent_with_subsystem_devtype@LIBUDEV_183'
collect2: ld returned 1 exit status

编辑:

为了编译程序,我输入了:-

g++ -c main.cpp

之后,要将 sfml 库链接到程序,我输入了这一行:-

g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
ubuntu-12.04 sfml 未定义参考

评论

0赞 Matt 6/7/2015
你能准确地显示你在终端中输入的内容来编译它吗?
0赞 anonymous 6/7/2015
@Matt是的,我加了。
0赞 Matthias Vegh 6/11/2015
你试过用 -ludev 吗?
1赞 anonymous 6/11/2015
无论如何,我将我的操作系统升级到 ubuntu 14.04,并在软件中心获得了正确安装的 sfml 2.1。所以问题解决了。
0赞 lostdev 7/15/2015
我遇到了类似的问题,不得不简单地将 g++ 升级到 4.9。

答:

-2赞 darkpsychic 7/30/2016 #1

正确链接lib文件夹的文件。

评论

0赞 Lahiru Jayaratne 7/30/2016
如果您不介意的话,您能解释一下如何通过示例正确链接文件吗?:)
1赞 Pathik Vejani 8/2/2016
明确您的答案