gpt4 book ai didi

c++ - XCode 4.2 静态库链接问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:56:45 24 4
gpt4 key购买 nike

我有 Core 静态库,一些 Component 静态库依赖于 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 有类 cMesh 继承 cResource

这里有一些测试:

  • 如果我尝试从 App 调用 rm->GetResource (...) 我会收到链接错误

  • 如果我尝试从 App 构建 cMesh,我会遇到链接错误

  • 如果我尝试从 App 调用将返回 cMesh 新实例的静态方法,我会收到链接错误

  • 如果我注释掉 cMesh 的构造但保留其他成员 cMesh 函数调用 App 链接正常。我什至可以调用删除网格

我从未见过这样的东西!

最佳答案

如果删除 cMesh构造函数,那么您将使用默认值(无参数,无主体)cMesh给你的构造函数。这听起来几乎像是由于您的 cMesh 中的某些代码而导致构建错误或缺少代码。构造函数,所以实际上并没有生成库,也许 Xcode 没有报告错误。 Xcode 不擅长报告链接器错误。

我建议查看链接器所说的缺少哪些符号,并仔细检查它们是否确实在您的代码中定义。我的猜测是您在 cMesh 中使用了这些符号之一。构造函数。很多时候使用虚拟基类,您可能会忘记在子类中定义实现一两个方法。可能是由于缺少基于您的模板的方法,或者您的模板不是 #include d 正确。这可以正常编译,但会导致您所看到的链接器错误。

如果 Xcode 没有向您显示完整的链接器错误,请显示日志导航器(Command ⌘+7),双击最后一个“Build”条目,选择错误,然后按选中时出现的行最右侧的按钮。符号应该列在那里。如果没有,是时候 xcodebuild在终端中。

如果不是这种情况,我有兴趣查看是否为适当的架构构建库的结果,或者这可能会刺激一些进展:

  1. 在 Xcode Organizer Shift ⇧+Command ⌘+2 中,单击“项目”并找到项目的 DerivedData 路径。
  2. 在终端中,导航到该目录 ( cd ~/Library/Developer/Xcode/DerivedData/proj-<random value>/ )
  3. 删除(或移到一边)Build 目录 ( rm -r Build )
  4. 在 Xcode 中,尝试使用 cMesh 构建施 worker 员在场。
  5. 找到图书馆产品文件 ( cd Build/Products/<scheme>-iphoneos )

您编译的静态库 ( <libname>.a ) 应该在这个目录中。如果他们不在那里,他们就不会 build (除非你把你的产品放在别处)。如果您的库在那里,让我们确认它们实际上是为适当的体系结构构建的。运行 otool -vh <library>.a .你应该看到类似这样的东西:

$ otool -vh libtesting.a 
Archive : libtesting.a
libtesting.a(testing.o):
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC ARM V7 0x00 OBJECT 3 1928 SUBSECTIONS_VIA_SYMBOLS

如您所见,我的测试库是为 ARMv7 构建的。

关于c++ - XCode 4.2 静态库链接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com