gpt4 book ai didi

ios - 防止调用静态库中的函数

转载 作者:行者123 更新时间:2023-11-28 23:18:19 24 4
gpt4 key购买 nike

我已经使用 xcode 为 IOS 创建了一个静态库。在C++中,如果一个类需要被其他程序调用,则需要添加“__declspec(dllexport)”来导出该类。在 xcode 中,不需要导出。有没有办法阻止调用库中我确实想公开给其他程序的函数?

谢谢。

最佳答案

http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/ExportingInterfaces.html

导出你的框架接口(interface)

当您使用 Xcode 构建框架或应用程序时,链接器会默认导出代码中定义的所有符号。对于具有许多符号的运输框架,这可能会导致运行时出现性能问题。加载框架时,动态链接编辑器加载与框架关联的符号。如果框架包含许多私有(private)函数,则不会使用这些私有(private)函数的符号,但仍会与公共(public)函数的符号一起加载。加载这些额外的符号不仅会浪费内存,而且在符号查找期间还需要更多的工作来遍历列表。

在 Xcode 中,您可以通过在链接器选项中指定导出文件来限制可执行文件导出的符号。

创建导出文件

导出文件是一个简单的文本文件(.txt 或其他文本文件扩展名),其中包含您要导出的符号列表。要创建该文件,请将一个新的空文件添加到您的 Xcode 项目中。在此文件中,添加要导出的符号列表,每行一个符号。

对于基于 ANSI C 的代码,您通常可以在函数或变量的名称前加上一个下划线字符作为符号名称的前缀。对于像 C++ 这样使用错位符号名称的语言,您可能需要运行 nm 工具来获取现有符号名称的列表。使用 -g 选项运行 nm 以查看当前导出的符号。然后您可以复制该工具的输出并将其粘贴到您的导出文件中,删除任何无关信息。以下文本显示了 nm 生成的 Cocoa 框架的一些示例输出:

U .objc_class_name_NSDate
b000ad54 T _InitCocoaFW
b000aea8 T _addNumbers
b000ade8 T _getInitDate
U _objc_msgSend

要导出此输出中指定的框架函数,您将使用以下文本创建一个文本文件:

_InitCocoaFW
_addNumbers
_getInitDate

关于ios - 防止调用静态库中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4733608/

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