0

我想在使用 C++ 的基于 ROS 的项目中使用 VLC 库。我使用 QT Creator 作为代码编辑器。

我试着按照下面的教程来实现一个简单的mp3文件播放:A simple C program to play mp3 using libvlc

Since then I'm getting the following exceptions:
undefined reference to `libvlc_new'
undefined reference to `libvlc_media_new_path'
undefined reference to `libvlc_media_player_new_from_media'
undefined reference to `libvlc_media_release'
undefined reference to `libvlc_media_player_play'
undefined reference to `libvlc_media_player_stop'
undefined reference to `libvlc_media_player_release'
undefined reference to `libvlc_release'
collect2: ld returned 1 exit status
make[2]: *** [../bin/my_face_tracker_demo] Error 1
make[1]: *** [CMakeFiles/my_face_tracker_demo.dir/all] Error 2
make: *** [all] Error 2
The process "/usr/bin/make" exited with code 2.
Error while building project my_qbo_interaction (target: Desktop)
When executing build step 'Make'

当然,我添加#include "vlc/vlc.h"到文件中。此外,我按照说明确保添加链接器的引用。这是我添加到 cmakelist.txt 文件中的内容:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(LIBVLC REQUIRED)
include_directories(${LIBVLC_INCLUDE_DIRS})
set(LIBS ${LIBS} ${LIBVLC_LIBRARIES})

make 能够编译该文件。它还能够找到 LIBVLC 库。这里是 make 的一部分输出:

-- 找到 LibVLC 包含目录路径:/usr/include -- 找到 LibVLC 库路径:/usr/lib/libvlc.so -- 找到 LibVLCcore 库路径:/usr/lib/libvlccore.so -- 找到 LibVLC 版本:1.1 .12(搜索:0.0)——配置完成——生成完成CMake警告:项目未使用手动指定的变量:

CMAKE_TOOLCHAIN_FILE

但我仍然收到上述错误消息......有人可以帮助我吗?

4

3 回答 3

0

看起来 VLC 库已正确找到,但您需要将它们实际链接到可执行文件中。

您可以通过target_link_libraries命令执行此操作。例如:

set(LIBS ${LIBS} ${LIBVLC_LIBRARIES})
add_executable(MyExe ${TheSources})
target_link_libraries(MyExe ${LIBS})
于 2013-05-07T22:35:44.523 回答
0

这可能是由架构不匹配引起的 - 您可以在此处查看我的答案以获取更多详细信息。

于 2020-10-08T00:28:49.580 回答
0

我想做同样的事情。对于其他陷入困境的人。

复制https://github.com/vlc-qt/vlc-qt/blob/master/cmake/FindLIBVLC.cmake 并将其放入项目根目录下的新目录 cmake/Modules 中。

然后cmake应该使用:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(LIBVLC REQUIRED)

如果您从上面检查 FindLIBVLC.cmake 目录的名称不是

include_directories(${LIBVLC_INCLUDE_DIRS})
set(LIBS ${LIBS} ${LIBVLC_LIBRARIES})

他们是:

${LIBVLC_INCLUDE_DIR} and ${LIBVLC_LIBRARY}
于 2021-09-09T00:20:03.910 回答