【问题标题】:Building static C++ lib for use with Objective-c app in Xcode 4在 Xcode 4 中构建用于 Objective-c 应用程序的静态 C++ 库
【发布时间】:2011-10-16 12:06:15
【问题描述】:

我找到了示例和帖子

  • 创建用于 C++ 应用程序的静态 C++ 库
  • 创建用于 Objective C 应用程序的静态 Objective C 库。

我几天来一直找不到并且一直在纠结的是创建静态 C++ 库以在 XCode 4 下的 Objective-C 应用程序中使用的正确方法。

我只想使用这个非常简单的代码进行测试:

#include <iostream>
#include "myCppLib.h"

using namespace std;

extern "C" void show_the_world() {
    cout << "Hello, world!\n";
}

我使用 armv6/armv7 目标、GCC 4.2 编译器、将“C++ 标准库类型”链接为“静态”并将“默认隐藏符号”设置为“是”,如静态 C++ 库的 Xcode 帮助所述。

我的 Objective-C 应用程序调用了关于 std++ 库的“show_the_world”函数错误,似乎未包含或未正确引用:

Undefined symbols for architecture armv6:
 "std::ios_base::Init::~Init()", referenced from:
  ___tcf_0 in libmyCppLib_dev.a(myCppLib.o)
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
      _show_the_world in libmyCppLib_dev.a(myCppLib.o)
  "std::ios_base::Init::Init()", referenced from:
  __static_initialization_and_destruction_0(int, int)in libmyCppLib_dev.a(myCppLib.o)
  "std::cout", referenced from:
  _show_the_world in libmyCppLib_dev.a(myCppLib.o)
ld: symbol(s) not found for architecture armv6
collect2: ld returned 1 exit status

我确信我为正确的体系结构编译了库,所以在另一个设置或我的代码中一定有问题。

欢迎任何帮助!

最好的问候, 吉米

【问题讨论】:

  • 这个帖子可能会有所帮助 - stackoverflow.com/questions/376966/…
  • 我已经新建了这篇文章,但由于我的英语“不太好”,我没有在这篇文章中找到答案。在您将我重定向回此之后,我花了更多时间 - 现在它可以工作了:) 重点是将 std++ 库也包含到生成的 Objective-c 项目的编译中。所以,非常感谢!
  • 是的,libstdc++.dylib 解决了问题,太棒了!

标签: c++ objective-c xcode4


【解决方案1】:

Jimmy Koerting 在 cmets 中提供了正确答案:应用程序需要链接到 libstdc++.dylib 以解析标准库符号。 感谢 Jimmy Koerting,但我想在这里添加的另一件事是,如果您在 iOS 6.1 中使用 xcode 最新版本,请添加此 libstdc++.6.dylib

【讨论】:

  • 是的,在我的 Xcode 5.0.2 上,我必须使用 libstdc++.6.dylib 来解决链接器错误。使用 libstdc++.dylib 或 libc++.dylib 没有帮助。
【解决方案2】:

在我自己的评论中回答;)

重点是将 std++ 库也包含到生成的 Objective-c 项目的编译中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 2017-07-12
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    相关资源
    最近更新 更多