object - 无法使用 cmake link_directories 找到目标文件
问题描述
我想在链接过程中添加几个 .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()
实际上,看起来不像绝对路径(并且不对应于库目标<param>
)的每个参数都被转换为链接器的选项。target_link_libraries
-l<param>
链接器将此参数解释为普通库名,并在链接目录中搜索名为lib<param>.a
or的文件。lib<param>.so
因此,-laudioconvert.o
链接器使用参数搜索具有名称的文件libaudioconvert.o.a
- 显然,这不是您想要的。
推荐阅读
- javascript - 在 ReactJs 中更新一个缓存项
- image - 如何将PNG格式的图像转换为GIF格式
- mapstruct - 使用 Mapstruct 实现 REST“字段”查询参数
- python - Pillow & numpy - 将颜色从 RGBA 替换为透明
- javascript - 汇总未应用 Babel 转换
- python - Peerjs call.on('stream') 在第一个用户连接时不运行
- python - 我无法正确地将我的 python 数据附加到 JSON 文件中
- excel - 将 Excel 数据导入 SAS 并将表格转换为矩阵形式
- c++ - Linux 能够从 C++ 中的用户模式程序以 root 身份启动进程
- mysql - 在测试主机设置上的 MySQL Workbench 上设置新连接时出现错误