我的公司销售一款依赖于NVIDIA CUDA工具包的商业Linux应用程序。然而,我们的许多客户在其设备上没有root访问权限,无法自行安装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
。
它有几个选项,特别是< code>OUTPUT,它是命令生成的输出文件,还有< code>DEPENDS,它是命令运行时需要准备好的依赖项列表。
您将指定OUTPUT
作为合并库(
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}
)
要实际运行该命令,您需要添加一个新目标(在macefile术语中,这将创建一个假目标。为了做到这一点,您使用
add_custom_target
。
它需要几个选项,我们想要的是
DEPENDS
,我们将其设置为自定义命令的输出,以及将其添加到默认ALL目标的ALL
。
add_custom_target(${OUTPUT_LIB}.create
ALL
DEPENDS
${OUTPUT_LIB}
)
.a静态库合并 静态库是.o文件的合集, 静态库合并就是将静态库的.o合并, 可以实现的工具 ar, 静态库的查看、拆分、合并 libtool, xcode提供的静态库操作工具 以libtool演示.a静态库合并 一、准备 在staticLib文件夹里准备好两个.a静态库 目录结构 . ├── libAFNetworking.a └── libSDWebImage.a 二、合并 执行命令
问题内容: 我有2个静态的Linux库,通过创建,和。 我想将它们合并到一个静态库中。 我怎样才能做到这一点。 我想创建一个合并的静态库,而不是将这两个库都提供给应用程序的最终链接。 问题答案: 您可以从两个文件中提取对象,然后使用提取的s 创建文件:
问题内容: 假设我有三个 C 静态库,它们说 libColor.a 取决于 libRGB。 a,而后者又取决于 libPixel.a 。据说库 libColor.a 依赖于库 libRGB.a, 因为 libColor.a中 有对 libRGB.a 中定义的某些符号的 引用 。如何将上述所有库合并到独立的新 libNewColor.a ? 独立意味着新库应已定义所有符号。因此,在链接时,我只需要给
出于安全考虑,我希望静态链接所有库,包括包含JNI\u OnLoad函数的本机库。我已经读到可以静态链接JNI库(http://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/invocation.html#library_version)但我用Android Studio做不到。有可能吗? 这是我目前拥有的。 在Java代码中: 在
问题内容: 我正在将PHP 5.3库转换为可在PHP 5.2上使用。阻碍我前进的主要因素是使用后期静态绑定,例如,如果将其转换为,将会得到相同的结果吗? 和之间有什么区别? 问题答案: 我会得到相同的结果吗? 并不是的。不过,我不知道针对PHP 5.2的解决方法。 和之间有什么区别? 指的是实际写入关键字的同一类。 在PHP 5.3的最新静态绑定中,指的是您在层次结构中调用方法的任何类。 在以下示
问题内容: 我在Google App Engine上使用了第三方路由器(httprouter),并且希望从根目录提供静态文件。 由于使用了App Engine,我需要将第三方路由器附加到on : 问题是,这会重复模式和出现“ /多个注册 ”的紧急情况 如何提供文件( 尤其是从根目录访问文件)并使用第三方路由器? 问题答案: 如果您在提供静态文件,则无法按照https://github.com/ju