Как связать libavformat в Cmake на Mac?

Я пытаюсь использовать libavformat из ffmpeg в проекте C++. У меня установлен ffmpeg с помощью homebrew.

Мой CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)
project(av_test)

set(CMAKE_CXX_STANDARD 11)

INCLUDE_DIRECTORIES(/usr/local/Cellar/ffmpeg/4.2.1_2/include)
LINK_DIRECTORIES(/usr/local/Cellar/ffmpeg/4.2.1_2/lib)

add_executable(av_test main.cpp)

TARGET_LINK_LIBRARIES(av_test libavformat)

При запуске cmake я получаю эту ошибку:

ld: library not found for -llibavformat
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [av_test] Error 1
make[2]: *** [CMakeFiles/av_test.dir/all] Error 2
make[1]: *** [CMakeFiles/av_test.dir/rule] Error 2
make: *** [av_test] Error 2

Быстрый find libavformat* в /usr/local/Cellar/ffmpeg/4.2.1_2/lib возвращает:

libavformat.58.29.100.dylib
libavformat.58.dylib
libavformat.a
libavformat.dylib

Также в /usr/local/Cellar/ffmpeg/4.2.1_2/include/libavformat есть avformat.h

Мой main.cpp:

#include <libavformat/avformat.h>

int main() {

    AVFormatContext *pFormatContext;

    return 0;
}

Я работаю на mac os 10.14 с cmake версии 3.15.5, ffmpeg версии 4.2.1.


person Alexandru Cancescu    schedule 29.11.2019    source источник
comment
Попробуйте написать TARGET_LINK_LIBRARIES(av_test avformat) или попробуйте написать TARGET_LINK_LIBRARIES(av_test -lavformat)   -  person Saisai3396    schedule 29.11.2019
comment
@ Saisai3396 Спасибо, это работает! Не могли бы вы написать ответ, чтобы я мог отметить его как решение?   -  person Alexandru Cancescu    schedule 29.11.2019
comment
Рад помочь! :)   -  person Saisai3396    schedule 29.11.2019


Ответы (1)


Проблема здесь отмечена из ошибки:

ld: library not found for -llibavformat

Как видите, в качестве префикса у него есть как «-l», так и «lib», даже несмотря на то, что «-l» должен заменить «lib» перед именем библиотеки. Похоже, что функция TARGET_LINK_LIBRARIES анализирует имена библиотек с автоматически присоединяемым префиксом -l (или lib). Итак, вам нужно написать одно из следующего:

TARGET_LINK_LIBRARIES(av_test avformat) TARGET_LINK_LIBRARIES(av_test -lavformat)

Добавление -l при запуске не имеет значения, но все равно принимается cmake.

person Saisai3396    schedule 29.11.2019