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

标签 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

.一些互联网搜索导致我出现链接错误,因为 libvlc 安装在/Applications/VLC.app/...../lib 中,这可能是问题所在吗?我应该以某种方式指定库的绝对链接吗?使用 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 命令(如果没有对你的文件应用任何更改,则二进制文件不会再次编译)(检查行:“Fixing本地运行的应用程序包")

最佳答案

免责声明:我对 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 需要一些清理,但它应该足够可读:)

遗憾的是,我没有正确解释其原因所需的技能,所以我会让真正了解的人更好地解释它。 尽管如此,它应该会帮助您前进!

关于c++ - 无法使用 libvlc 库 (osx) 运行 C++ 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23065359/

相关文章:

c++ - 未命名的命名空间和 Visual C++ 链接器性能

c++ - 查找快速进程的 CPU 使用率

c++ - 在 O(1) 上运行的内存池

c++ - 在我的 Mac Qt 项目中找不到“fbxsdk.h”文件,如何在我的 Mac Qt 项目中添加 FBX SDK?

android - 仅使用 build.xml 插入构建目标?

C++ 将程序分解为函数

c - macOS 上的段错误,但 Ubuntu 上没有

java - OSX 上的独占串行端口访问

python - 在另一台计算机上运行 pyinstaller .exe 文件时缺少 .dll

git - 我怎样才能让 git 拒绝推送无法编译的代码?