Не удается найти объектный файл с cmake link_directories - PullRequest
0 голосов
/ 08 мая 2020

Я хочу добавить несколько файлов .o в процесс связывания. Если я сделаю это так:

TARGET_LINK_LIBRARIES(FFMPEGTest stdc++fs -pthread /home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o ...some more stuff... )

, он найдет файл. Все эти файлы находятся в одном каталоге, поэтому я хочу добавить их одновременно:

link_directories(/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/)
TARGET_LINK_LIBRARIES(FFMPEGTest stdc++fs -pthread audioconvert.o ...some more stuff... )

, но это не работает:

/usr/bin/ld: cannot find -laudioconvert.o

как мне это исправить?

1 Ответ

1 голос
/ 08 мая 2020

Документация для target_link_libraries не позволяет относительный путь (audioconvert.o) быть параметром этой команды. Это должно быть либо абсолютный путь (/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o), или простое имя библиотеки (например, z для libz.a библиотеки).

Потому что объектный файл audioconvert.o не является библиотекой, его нельзя указать с простым именем библиотеки . У вас нет другого выбора, кроме как указать абсолютный путь для объектных файлов.

Для указания нескольких объектных файлов в каком-либо каталоге вы можете использовать foreach l oop:

foreach(obj audioconvert.o foo.o bar.o)
  target_link_libraries(FFMPEGTest /home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/${obj})
endforeach()

Фактически каждый параметр от <param> до target_link_libraries, который не выглядит как абсолютный путь (и не соответствует библиотеке target ), преобразуется в -l<param> параметр для компоновщика.

Компоновщик интерпретирует этот параметр как простое имя библиотеки , а ищет файл с именем lib<param>.a или lib<param>.so в каталогах ссылок.

Итак, с параметром -laudioconvert.o компоновщик ищет файл с именем libaudioconvert.o.a - очевидно, это не то, что вам нужно.

...