找不到带有cmake链接目录的目标文件

问题描述 投票:0回答:1

我想在链接过程中添加几个.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

我该如何解决?

object gcc cmake ld
1个回答
0
投票
Documentationtarget_link_libraries]不允许

相对路径(audioconvert.o)作为该命令的参数。它应该是绝对路径/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o)或普通库名称(例如z库的libz.a)。

因为目标文件audioconvert.o不是库,所以不能用

普通库名称指定。除了为目标文件指定绝对路径

外,您别无选择。为了在某些目录中指定多个目标文件,您可以使用foreach循环:

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


实际上,每个看起来不像绝对路径(并且不对应于库

target的)参数<param>target_link_libraries,都被转换为链接器的-l<param>选项。

链接器将此参数解释为

普通库名称

,对于链接目录中名为searcheslib<param>.a的文件,其解释为lib<param>.so因此,链接器使用参数-laudioconvert.o搜索名称为libaudioconvert.o.a的文件-显然,这不是您想要的。
© www.soinside.com 2019 - 2024. All rights reserved.