问题标签 [object-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
299 浏览

android - Android gradle 抱怨对象库有多个输出

使用 gradle 6.5,我能够构建一个 cmake 项目,该项目的目标依赖于对象库,例如

使用类似的东西声明对象库的位置

如此有效地src1.osrc2.omylib. 我无法真正改变这一点(例如,将这些源文件直接放在add_libraryfor 中objlib)。

使用 gradle 6.7.1,gradle 抱怨目标objlib有多个输出,即src1.osrc2.o

(为简洁而编辑的路径)。

我试图通过在我的以下内容中明确指定我只希望 android 担心mylib目标build.gradle

正如Gradle 中所建议的,无法使用 OBJECT 库构建 CMake 项目,因为它需要一个输出文件,但这不起作用。

0 投票
0 回答
55 浏览

c++ - 不再混合静态库和共享库

我有一个项目,我在静态库和共享库之间混合。共享库已交付。每个共享库都是用其对应的静态库构建的。共享库也可以依赖于其他共享库。例如,我有:sharedAsharedBsharedCstaticA和。内置于内部,与其他共享类似。比方说,除了依赖于,还依赖于。staticBstaticCSharedAstaticAsharedCstaticCsharedB

对于静态库,如果他们需要依赖另一个静态库,我会链接到一个对应的共享库。例如:

staticB取决于staticA。因此,我链接staticBsharedA. 这样做的原因是如果静态声明 staticB 对staticA.

这个系统一直在工作。但是,当我构建具有隐藏可见性的静态库时,就会出现问题。链接器链接没有错误。但是一个特定类的多个符号可能最终会出现在最终的符号映射中。因此,程序可以选择不需要的,这会导致奇怪的行为。

我一直在阅读有关 cmake 对象库的信息,在这种情况下,将静态库切换到对象库可能会有所帮助。我将静态库更改为对象,并得到未定义的符号错误。我定义了一个对象库对其他库的依赖,但仍然无法摆脱所有错误。我的问题是:

  1. target_link_libraries(obj2 PUBLIC obj)用来声明 2 个对象库之间的依赖关系。这可能是我得到未定义符号错误的原因吗?因为根据 cmake 文档:

对象库可以“链接”到其他对象库以获得使用要求,但由于它们没有链接步骤,因此不会对其对象文件进行任何操作。

  1. 也许我应该切换到target_link_libraries(obj2 $<TARGET_OBJECTS:obj>)这样obj2是用来自的目标文件构建的obj.c?另一件事是:obj需要是一个库(使用创建add_library)。在我定义所有链接的函数中,obj是一个变量,不能放在$<TARGET_OBJECTS:. 我一直在环顾四周,但找不到任何东西。有没有办法可以将变量名放在 之后$<TARGET_OBJECTS:,或者我必须以某种方式折射才能使这成为可能?

  2. 关于如何做到这一点的任何其他建议都会对我有所帮助