2014-04-14 25 views
1

我正在嘗試使用libvlc庫使用cmake來編譯我的C++項目。我的os是osx v10.9.2。我的cmake版本是2.8.12。我實際上可以用cmake編譯我的程序並make。但是當我嘗試運行該程序時,出現鏈接錯誤:無法使用libvlc庫(osx)運行C++程序

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命令(如果沒有更改應用於文件,則不會再編譯二進制文件)(請檢查以下行:「修復應用程序捆綁本地運行「)

回答

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需要一些清理,但它應該是足夠的可閱讀:)

可悲的是,我沒有所需的技能爲了正確解釋這個原因,所以我會讓一個真正懂得解釋的人知道。 它應該幫助你前進!