如何将钴构建为共享库?

Posted

技术标签:

【中文标题】如何将钴构建为共享库?【英文标题】:How to build cobalt as a shared library? 【发布时间】:2018-06-01 06:27:55 【问题描述】:

我想将钴作为浏览器集成到我的项目中。计划是通过将钴作为共享库来实现这一点。详细解释将不胜感激。

我的具体问题是如何将钴浏览器构建为共享库。

【问题讨论】:

尝试在cobalt.gyp文件中创建一个目标为cobalt_shared_lib,类型为“shared_library”,但构建给我的错误是目标cobalt_shared_lib不支持“shared_library”。但是,如果使用“static_library”而不是“shared_library”作为类型,则构建相同的目标时不会出现任何错误。 我们目前不支持将 Cobalt 构建为共享库,也没有相关指南。你能解释一下为什么需要 Cobalt 作为共享库以及“我想在我的项目中集成 Cobalt 作为浏览器”吗?详细的意思? 套用 Daniel 的问题:您如何想象这样一个库的 API 是什么样的? @Midhun 这是一个软提醒。 @DanielJuyungSeo 感谢您的提问。我们想构建另一个使用来自钴的 api 的应用程序。对于特定的设备目标,我们需要它。如果我们可以拥有一个共享库,那么我们就可以创建使用钴浏览器库功能的最终用户应用程序。这样可以避免我们发布源代码。 【参考方案1】:

将 Cobalt 集成到另一个二进制文件中的最简单方法是将 Starboard 实现中的 main() 函数(我假设您的操作系统类似于 POSIX)重命名为 cobalt_main() 并更改 @987654324 中的 type @target(位于cobalt/browser/cobalt.gyp)到shared_library。更深层次的集成需要更多的努力。

我不太确定您是否需要将 Cobalt 构建为共享库。也许您可以简单地运行相同的 Cobalt 二进制文件,但将其指向另一个应用程序?

【讨论】:

我尝试了你说的方法,但实际上导致了以下错误,还有很多但都是同一类型的。 error: ../../cobalt/base/wrap_main_starboard.h:34: can't create dynamic relocation R_X86_64_32S against symbol '__asan_option_detect_stack_use_after_return' defined in obj/cobalt/browser/cobalt.main.o 我也一直在寻找这个R_X86_64_32S。这是什么,为什么会导致错误。

以上是关于如何将钴构建为共享库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用共享库构建 vtkLocal 示例?

如何包含具有多个 dll/dylib 的外部(共享)库

如何在 Android 中构建发布共享库项目? [复制]

如何使用自动工具构建静态和共享库?

Automake:如何在不安装的情况下构建共享库

如何在 Linux 上将 googleTest 设置为共享库