libVLC|make:对“libvlc_new”的未定义引用

Posted

技术标签:

【中文标题】libVLC|make:对“libvlc_new”的未定义引用【英文标题】:libVLC|make: undefined reference to `libvlc_new' 【发布时间】:2019-04-02 22:36:03 【问题描述】:

对于一个小项目,我决定使用libvlc,因此使用了 C/C++。

使用不同的引用,我以某种方式安装了 opencv 和 libvlc 库,还编写了以下 CMake 文件:

cmake_minimum_required(VERSION 3.10)
project(untitled1)

set(CMAKE_CXX_STANDARD 14)
SET(CMAKE_MODULE_PATH
        $CMAKE_SOURCE_DIR/cmake
        $CMAKE_SOURCE_DIR/config
        $CMAKE_SOURCE_DIR/config/platform
        )

find_package(OpenCV REQUIRED)
find_package(LIBVLC REQUIRED)



file(GLOB SOURCE_FILES
        "$CMAKE_CURRENT_SOURCE_DIR/*.h"
        "$CMAKE_CURRENT_SOURCE_DIR/*.cpp"
        )
add_executable(untitled1 $SOURCE_FILES)

# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: $OpenCV_VERSION")
message(STATUS "    libraries: $OpenCV_LIBS")
message(STATUS "    include path: $OpenCV_INCLUDE_DIRS")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
    # Add OpenCV headers location to your include paths
    include_directories($OpenCV_INCLUDE_DIRS)
endif()


include_directories($OpenCV_INCLUDE_DIRS)
include_directories($LIBVLC_INCLUDE_DIRS)

set(LIBS $LIBS $OpenCV_LIBS)
set(LIBS $LIBS $LIBVLC_LIBRARIES )



target_link_libraries( untitled1 $LIBS)

但是当我这样做时,cmake 然后make 我收到以下错误:

[100%] Linking CXX executable untitled1
CMakeFiles/untitled1.dir/VLCReader.cpp.o: In function `VLCReader::VLCReader(char*)':
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:17: undefined reference to `libvlc_new'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:18: undefined reference to `libvlc_media_player_new'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:21: undefined reference to `libvlc_video_set_callbacks'
CMakeFiles/untitled1.dir/VLCReader.cpp.o: In function `VLCReader::~VLCReader()':
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:26: undefined reference to `libvlc_media_player_stop'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:27: undefined reference to `libvlc_media_player_release'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:28: undefined reference to `libvlc_release'
CMakeFiles/untitled1.dir/VLCReader.cpp.o: In function `VLCReader::start(int, int)':
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:33: undefined reference to `libvlc_media_player_pause'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:34: undefined reference to `libvlc_media_new_location'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:35: undefined reference to `libvlc_media_player_set_media'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:36: undefined reference to `libvlc_media_release'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:38: undefined reference to `libvlc_video_set_format'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:39: undefined reference to `libvlc_media_player_play'
CMakeFiles/untitled1.dir/VLCReader.cpp.o: In function `VLCReader::pause(bool)':
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:45: undefined reference to `libvlc_media_player_set_pause'
CMakeFiles/untitled1.dir/VLCReader.cpp.o: In function `VLCReader::updataSize()':
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:51: undefined reference to `libvlc_video_get_width'
/home/ravinder/CLionProjects/untitled1/VLCReader.cpp:52: undefined reference to `libvlc_video_get_height'
collect2: error: ld returned 1 exit status
CMakeFiles/untitled1.dir/build.make:166: recipe for target 'untitled1' failed

请帮助我继续前进。我对基于 C/C++ cmake 的世界真的很陌生。

【问题讨论】:

链接器找不到几个“libvlc”定义,这表明您缺少这些库。您能否验证LIBVLC_LIBRARIES CMake 变量是否填充了有效的库?您可以像处理 OpenCV 变量一样使用 CMake message 命令。 code.videolan.org/videolan/libvlcpp 这应该会有所帮助 在您分配给CMAKE_MODULE_PATH 变量的目录之一下,您有FindLIBVLC.cmake 脚本,该脚本实际上是在处理对find_package(LIBVLC) 的调用期间执行的。阅读该脚本顶部的文档,并找出它设置了哪些实际变量以在您的项目中使用它们。很可能,您在代码中使用的变量 LIBVLC_LIBRARIES 根本没有被此脚本设置。 【参考方案1】:

感谢@Tsyvarev 和其他为我指明正确方向的人。

我在 CMake 文件中的错误是我使用了错误的变量名,或者说使用了未定义的 usng 变量。

LIBVLC_INCLUDE_DIRSLIBVLC_INCLUDE_DIR

LIBVLC_LIBRARIESLIBVLC_LIBRARY

谢谢大家!

【讨论】:

以上是关于libVLC|make:对“libvlc_new”的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

VC/MFC动态库Debug版本下正常,Release版本下错误

libVLC 视频缩放

C++ LibVLC 从帧/图像创建流

libvlc 和 dbus 接口

FileNotFoundError:找不到模块“libvlc.dll”

Linux 下eclipse cpp配置libvlc环境