问题标签 [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.
android - Android gradle 抱怨对象库有多个输出
使用 gradle 6.5,我能够构建一个 cmake 项目,该项目的目标依赖于对象库,例如
使用类似的东西声明对象库的位置
如此有效地src1.o
拉src2.o
入mylib
. 我无法真正改变这一点(例如,将这些源文件直接放在add_library
for 中objlib
)。
使用 gradle 6.7.1,gradle 抱怨目标objlib
有多个输出,即src1.o
和src2.o
:
(为简洁而编辑的路径)。
我试图通过在我的以下内容中明确指定我只希望 android 担心mylib
目标build.gradle
:
c++ - 不再混合静态库和共享库
我有一个项目,我在静态库和共享库之间混合。共享库已交付。每个共享库都是用其对应的静态库构建的。共享库也可以依赖于其他共享库。例如,我有:sharedA
、sharedB
、sharedC
、staticA
和。内置于内部,与其他共享类似。比方说,除了依赖于,还依赖于。staticB
staticC
SharedA
staticA
sharedC
staticC
sharedB
对于静态库,如果他们需要依赖另一个静态库,我会链接到一个对应的共享库。例如:
staticB
取决于staticA
。因此,我链接staticB
到sharedA
. 这样做的原因是如果静态声明 staticB 对staticA
.
这个系统一直在工作。但是,当我构建具有隐藏可见性的静态库时,就会出现问题。链接器链接没有错误。但是一个特定类的多个符号可能最终会出现在最终的符号映射中。因此,程序可以选择不需要的,这会导致奇怪的行为。
我一直在阅读有关 cmake 对象库的信息,在这种情况下,将静态库切换到对象库可能会有所帮助。我将静态库更改为对象,并得到未定义的符号错误。我定义了一个对象库对其他库的依赖,但仍然无法摆脱所有错误。我的问题是:
- 我
target_link_libraries(obj2 PUBLIC obj)
用来声明 2 个对象库之间的依赖关系。这可能是我得到未定义符号错误的原因吗?因为根据 cmake 文档:
对象库可以“链接”到其他对象库以获得使用要求,但由于它们没有链接步骤,因此不会对其对象文件进行任何操作。
也许我应该切换到
target_link_libraries(obj2 $<TARGET_OBJECTS:obj>)
这样obj2
是用来自的目标文件构建的obj.c
?另一件事是:obj
需要是一个库(使用创建add_library
)。在我定义所有链接的函数中,obj
是一个变量,不能放在$<TARGET_OBJECTS:
. 我一直在环顾四周,但找不到任何东西。有没有办法可以将变量名放在 之后$<TARGET_OBJECTS:
,或者我必须以某种方式折射才能使这成为可能?关于如何做到这一点的任何其他建议都会对我有所帮助