我想在链接过程中添加几个.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
我该如何解决?
target_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>
选项。普通库名称
,对于链接目录中名为searches或lib<param>.a
的文件,其解释为lib<param>.so
。因此,链接器使用参数-laudioconvert.o
搜索名称为libaudioconvert.o.a
的文件-显然,这不是您想要的。