【问题标题】:Static library for Mac OSMac OS 的静态库
【发布时间】:2014-01-13 09:21:07
【问题描述】:

我为 Mac OS 编写了一个 C++ 静态库。它适用于使用智能卡运行的应用程序。因此,它使用了 PCSC.framework。在编译mylib的过程中,没有问题,导出了一个静态的lib。我创建了一个应用程序,它是命令行工具。我将我的静态库添加到应用程序中。当我从 lib 的一个类创建实例并调用实例的方法时,我为架构 x86_64 获取了错误未定义符号:SCardConnect、SCardEstablishContext 和其他 pcsc 函数

为了解决这些错误,我尝试了以下方法;

在将架构从 64 位更改为 32 位英特尔后,我重建了静态库。然后我还重建了测试应用程序。但类似的错误仍在继续。只是与早期的 i386 未定义符号不同。

我有适用于 x86_64 和 i386 架构的 PCSC。 libccid 用于 i386。我正确运行 pcsctest。

请告诉我如何解决它。

【问题讨论】:

  • 通过在静态库中运行file object.o 来检查其中一个目标文件。它是否同时显示 i386 和 x86_64 代码?现在对您的应用程序二进制文件或其目标文件之一执行相同的操作。
  • 请不要在问题中发布答案——人们不会轻易找到它。而是将其作为答案发布。
  • 系统不允许我为自己的问题写答案。所以我编辑了我的问题。

标签: c++ macos static-libraries pcsc


【解决方案1】:

构建静态库不会链接和解析框架的所有符号。看看以下类似的问题:

需要考虑的一些替代方案是:

  • 包含 PCSC.framework 作为您的框架依赖项 应用程序,就像您对图书馆所做的那样。
  • 创建框架或 动态库而不是静态库。
  • 在 PCSC.framework 上调用 dlopen/dlsym。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-11
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多