我正在尝试使用带有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命令(如果没有对文件应用更改,则不再编译二进制文件)(检查行:“修复本地运行的应用程序包“)
答案 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需要一些清理,但它应该足够可读:)
可悲的是,我没有足够的技能来解释原因,所以我会让真正了解的人解释一下。 它应该可以帮助你前进!