gpt4 book ai didi

merge - 如何使用 CMake 将我自己的 .o 文件与第 3 方静态库合并以创建新的合并静态库?

转载 作者:行者123 更新时间:2023-12-05 06:37:35 39 4
gpt4 key购买 nike

我的公司销售依赖于 NVIDIA CUDA 工具包的商业 Linux 应用程序。然而,我们的许多客户在他们的机器上没有根访问权限,也无法自行安装 CUDA,因此我们希望将 CUDA 静态库与我们的应用捆绑在一起。

我们的法律部门表示,我们需要将库的内容实际包含在我们应用的现有静态库中内部,而不是仅仅将 CUDA 静态库作为单独的文件提供。我可以手动创建这样一个合并库,它工作正常:

libtool --mode=link gcc -static -o <my library>.a <my library's object files> /usr/local/cuda/lib64/libcudart_static.a

(我知道这不是可移植的,但我只针对 Linux,所以没关系)

我在 CMake 中执行此操作时遇到问题,感觉我在与系统作斗争。有没有一种合理合理的方法来做到这一点?

我已经阅读了很多有关该主题的 SO 答案,但我发现没有一个是关于如何从 CMake 中的第 3 方二进制文件创建合并静态库的。

最佳答案

您可以使用 add_custom_command 运行 libtool .

它有几个选项,特别是 OUTPUT ,这是命令生成的输出文件,DEPENDS ,这是命令在运行时需要准备好的依赖项列表。

您将指定 OUTPUT作为合并库(在您的示例中为 <my library>.a)和 DEPENDS作为目标文件被合并到库中(在您的示例中为 <my library's object files>)

add_custom_command(
OUTPUT
${OUTPUT_LIB}

COMMAND
libtool --mode=link gcc -static -o ${OUTPUT_LIB} ${INPUT_OBJS} ${LIB_CUDA}

COMMENT
"Creating merged ${OUTPUT_LIB}"

DEPENDS
${INPUT_OBJS}
)

然后要实际运行命令,您需要添加一个新目标(用 makefile 的说法,这将创建一个 phony target。为此,您可以使用 add_custom_target

需要几个选项,我们想要的是DEPENDS再次,我们将其设置为自定义命令的 outputALL它将它添加到默认的 ALL 目标。

add_custom_target(${OUTPUT_LIB}.create
ALL
DEPENDS
${OUTPUT_LIB}
)

关于merge - 如何使用 CMake 将我自己的 .o 文件与第 3 方静态库合并以创建新的合并静态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47440756/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com