【发布时间】:2012-01-28 05:49:30
【问题描述】:
我有 Core 静态库,几个 Component 静态库中继在 Core 上,然后还有一个 链接到 Core 和 Component 库的应用。我的 App 可以链接到 Core 和 Component 只要 Component 不使用来自 的类Core(App 使用 Core 中的类)。
我在 armv6 和 armv7 版本中都收到以下错误。所以我的问题不是每个人都有的非常流行的链接问题。
ld: symbol(s) not found for architecture armv6
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我在 Component 中添加了对 Core 的引用,甚至将它添加到静态库不需要的“Link Binary With Libraries”中。
自从我开始遇到这个问题后,我开始怀疑我的设计......它在动态链接环境中可能更有意义,但在静态环境中它仍然应该是可行的,特别是因为这已经在 Windows 下使用 MSVC 编译器工作。
编辑: 我取得了一些进展!虽然我仍然不知道该去哪里。
这是我的设置:
Core 有一个类 cResourceManager,它有一个模板化方法 GetResource
(int id) Core 也有类 cResource
Component 具有继承 cResource 的类 cMesh
这里有一些测试:
如果我尝试从 App 调用 rm->GetResource
(...) 我会收到链接错误 如果我尝试从 App 构建 cMesh,则会出现链接错误
如果我尝试从 App 调用将返回新 cMesh 实例的静态方法,则会收到链接错误
如果我注释掉 cMesh 的构造,但保留其他成员 cMesh 函数调用 App 链接正常。我什至可以调用 删除网格。
我从来没有见过这样的东西!
【问题讨论】:
-
希望这会有所帮助...(目前为 100%)
-
设计不错,我们对两个 iOS 应用使用了类似的方法;所以几乎可以肯定“只是”某种配置问题。
-
@rvalue 是的,我也针对 iOS。目前我唯一的想法是我可能正在使用模板工厂或其他东西进行一些循环依赖。我用模块引入了新的资源类型,但核心有模板资源工厂。