无法使用libvlc库(osx)运行c ++程序

时间:2014-04-14 16:31:05

标签: c++ macos compilation cmake libvlc

我正在尝试使用带有libvlc库的cmake来编译我的c ++项目。我的操作系统是osx v10.9.2。我的cmake版本是2.8.12。我实际上可以使用cmake和make编译我的程序。但是当我尝试运行该程序时,我收到了链接错误:

dyld: Library not loaded: @loader_path/lib/libvlc.5.dylib

。一些互联网搜索引发了一个链接错误,这个错误来自于/Applications/VLC.app/...../lib中安装了libvlc这可能是问题吗?我应该以某种方式指定图书馆的绝对链接吗?用rpath?我在这里有点失落。

这是我的CMakeLists.txt简化:

cmake_minimum_required(VERSION 2.8.8)

set(LIBVLC_PATH "/Applications/VLC.app/Contents/MacOs")

find_path(LIBVLC_INCLUDE_DIR
        NAMES vlc/libvlc.h
        PATHS ${LIBVLC_PATH}/include
        PATH_SUFFIXES vlc
)

find_library( LIBVLC_LIBRARY
        NAMES libvlc vlc
        PATHS ${LIBVLC_PATH}/lib
        NO_DEFAULT_PATH
)
find_library( LIBVLC_LIBRARY NAMES libvlc vlc)

find_library( LIBVLC5_LIBRARY
        NAMES libvlc.5 vlc.5
        PATHS ${LIBVLC_PATH}/lib
        NO_DEFAULT_PATH
)
find_library( LIBVLC5_LIBRARY NAMES libvlc.5 vlc.5)

include_directories( ${LIBVLC_INCLUDE_DIR} )
link_directories( ${LIBVLC_PATH}/lib )

add_executable(
        Projet.x
        ${sourcefiles}
        ${headerfiles}
)

target_link_libraries(
        Projet.x
        ${LIBVLC_LIBRARY}
        ${LIBVLC5_LIBRARY}
)  

[编辑解决方案]
感谢您的链接,我设法使用以下脚本使其工作:

#!/bin/bash
if [ $# -lt 2 ] ; then
  echo "Usage: $0 <vlc_path> <project_path>"
  exit 1
fi
VLC_PATH=$1
PROJECT_PATH=$2
install_name_tool -change @loader_path/lib/libvlc.5.dylib $VLC_PATH/lib/libvlc.5.dylib $YCSTATS_PATH/build/YCStats.x
install_name_tool -change @loader_path/lib/libvlccore.7.dylib $VLC_PATH/lib/libvlccore.7.dylib $PROJECT_PATH/build/YCStats.x

使用以下命令在CMakeList.txt中调用此脚本:

add_custom_command( TARGET Project.x
    POST_BUILD
    COMMAND ${CMAKE_SOURCE_DIR}/cmake/Modules/FixBundle.sh ${LIBVLC_PATH} ${CMAKE_CURRENT_SOURCE_DIR}
    COMMENT "Fixing application bundle for local run"
)

如果之后没有看到任何差异,请尝试修改主源然后保存并执行make命令(如果没有对文件应用更改,则不再编译二进制文件)(检查行:“修复本地运行的应用程序包“)

1 个答案:

答案 0 :(得分:2)

免责声明:我对MacOSX的开发知之甚少。

我将这个脚本用于我的项目:http://git.videolan.org/?p=vlmc.git;a=blob;f=cmake/FixBundle.sh,这非常基于Mac上VLC的主要开发人员的建议。

从此CMakeLists.txt调用:http://git.videolan.org/?p=vlmc.git;a=blob;f=src/CMakeLists.txt#l288

我承认CMakelists需要一些清理,但它应该足够可读:)

可悲的是,我没有足够的技能来解释原因,所以我会让真正了解的人解释一下。 它应该可以帮助你前进!