Object 找不到包含cmake link_目录的对象文件
我想向链接进程添加几个.o文件。如果我这样做: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
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
的文件-显然,这不是您想要的