2013-05-07 1 views
0

Я хочу использовать библиотеку VLC в проекте в ROS основе с использованием C++. Я использую Qt Creator в качестве редактора кода.Неопределенная ссылка на «libvlc_new», но был связан правильно?

Я пытался следовать следующий учебник для реализовать простое воспроизведение mp3 файла:.. A simple C program to play mp3 using libvlc

Since then I'm getting the following exceptions: 
undefined reference to `libvlc_new' 
undefined reference to `libvlc_media_new_path' 
undefined reference to `libvlc_media_player_new_from_media' 
undefined reference to `libvlc_media_release' 
undefined reference to `libvlc_media_player_play' 
undefined reference to `libvlc_media_player_stop' 
undefined reference to `libvlc_media_player_release' 
undefined reference to `libvlc_release' 
collect2: ld returned 1 exit status 
make[2]: *** [../bin/my_face_tracker_demo] Error 1 
make[1]: *** [CMakeFiles/my_face_tracker_demo.dir/all] Error 2 
make: *** [all] Error 2 
The process "/usr/bin/make" exited with code 2. 
Error while building project my_qbo_interaction (target: Desktop) 
When executing build step 'Make' 

конечно, я добавил #include "vlc/vlc.h" к файлу Кроме того, я следовал инструкциям на http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries, чтобы убедиться, что я добавить ссылки для компоновщика Это то, что я добавил к cmakelist.txt-файлу:

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") 
find_package(LIBVLC REQUIRED) 
include_directories(${LIBVLC_INCLUDE_DIRS}) 
set(LIBS ${LIBS} ${LIBVLC_LIBRARIES}) 

make способен скомпилировать файл. Он также может найти библиотеки LIBVLC. Здесь часть продукции от марки:

- Найдено LibVLC включает в себя-Dir пути:/USR/включать - найдено путь к библиотеке LibVLC: /usr/lib/libvlc.so - Найдено библиотека LibVLCcore путь: /usr/lib/libvlccore.so - Найдено LibVLC версия: 1.1.12 (поиск: 0.0) - Конфигурирование сделано - Генерирование сделано CMake Предупреждение: переменные в ручном режиме не использовались проектом:

CMAKE_TOOLCHAIN_FILE 

Но я все еще получаю вышеуказанную ошибку сообщения ... Кто-нибудь может мне помочь?

+0

Похоже, вы правильно нашли LIBS VLC, но вы назвали [ 'target_link_libraries'] (http://www.cmake.org/cmake/help/v2.8.10/cmake .html команда #: target_link_libraries)? – Fraser

+0

нет этого нет! Но как на самом деле синтаксис для этого? Я попробовал target_link_libraries (LIBVLC), что привело к тем же проблемам ... – stromflut

+0

Теперь я добавил ответ, так как это, похоже, проблема. – Fraser

ответ

0

Похоже, что библиотеки VLC были правильно найдены, но вам действительно нужно связать их с вашим исполняемым файлом.

Вы делаете это с помощью команды target_link_libraries. Например:

set(LIBS ${LIBS} ${LIBVLC_LIBRARIES}) 
add_executable(MyExe ${TheSources}) 
target_link_libraries(MyExe ${LIBS}) 
+0

Это уже кажется довольно хорошим. Я просто очень новичок в мире C++/Linux. Как мне установить «MyExe» и другие переменные? Я попытался добавить следующее: add_executable (LIBVLC $ {CMAKE_SOURCE_DIR}) target_link_libraries (LIBVLC $ {LIBVLC_LIBRARIES}) Не помогло :-( – stromflut

+1

Ах право The [ 'add_executable'] (HTTP:. // WWW. cmake.org/cmake/help/v2.8.10/cmake.html#command:add_executable) принимает имя вашего exe в качестве первого аргумента, тогда ему нужен список исходных файлов, которые собираются скомпилировать в exe. В вашем примере вы передаете путь к корню вашего проекта, так как список файлов - '$ {CMAKE_SOURCE_DIR}' - это каталог, в котором живет ваш CMakeLists.txt верхнего уровня! Кроме того, «LIBVLC» довольно странный имя исполняемого файла - я бы тоже рекомендовал вам изменить это :-) В любом случае вам нужно иметь что-то вроде 'add_executable (MyExe src/main.cpp)' – Fraser

+0

Если у вас есть несколько файлов для компиляции в exe, просто перечислите их все. Вы можете собрать их в переменную (например, '$ {TheSources}' в моем примере). например 'set (TheSources src/a.cpp src/b.cpp src/main.cpp)' then' add_executable (MyExe $ {TheSources}) '. – Fraser