Object 找不到包含cmake link_目录的对象文件

Object 找不到包含cmake link_目录的对象文件,object,gcc,cmake,ld,Object,Gcc,Cmake,Ld,我想向链接进程添加几个.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/l

我想向链接进程添加几个.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
如何解决此问题?

对于
目标链接库
不允许相对路径(
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()

实际上,每个参数
目标链接库
,看起来不像绝对路径(也不对应于库目标),都被转换为链接器的
-l
选项

链接器将此参数解释为普通库名称,并将其用于链接目录中名为
lib.a
lib.so
的文件

因此,使用参数
-laudioconvert.o
链接器搜索名为
libaudioconvert.o.a
的文件-显然,这不是您想要的