无法使用 cmake 找到目标文件 link_directories
Can not find object file with cmake link_directories
我想向 link 进程添加几个 .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
我该如何解决这个问题?
Documentation for target_link_libraries
不允许 相对路径 (audioconvert.o
) 作为该命令的参数。它应该是 绝对路径 (/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o
) 或 普通库名称 (如 z
for 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()
实际上,每个参数<param>
到target_link_libraries
,看起来都不像绝对路径(而且不对应库target ), 转换为 linker 的 -l<param>
选项。
linker 将此参数解释为 普通库名称,searches 用于名为 lib<param>.a
或 [=22] 的文件=] 在 link 目录中。
因此,使用参数 -laudioconvert.o
,linker 搜索名称为 libaudioconvert.o.a
的文件 - 显然,这不是您想要的。
我想向 link 进程添加几个 .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
我该如何解决这个问题?
Documentation for target_link_libraries
不允许 相对路径 (audioconvert.o
) 作为该命令的参数。它应该是 绝对路径 (/home/stiv2/jsoft/nv-ffmpeg/ffmpeg/libswresample/audioconvert.o
) 或 普通库名称 (如 z
for 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()
实际上,每个参数<param>
到target_link_libraries
,看起来都不像绝对路径(而且不对应库target ), 转换为 linker 的 -l<param>
选项。
linker 将此参数解释为 普通库名称,searches 用于名为 lib<param>.a
或 [=22] 的文件=] 在 link 目录中。
因此,使用参数 -laudioconvert.o
,linker 搜索名称为 libaudioconvert.o.a
的文件 - 显然,这不是您想要的。