1

首先,我在 MAC OS X 10.6 上使用 Xcode 3.2.5

我有一个构建和运行良好的 Cocoa 应用程序项目。我在这个项目中有一些函数,我正在使用这些函数导出:

#define CORE_EXPORT __attribute__ ((visibility ("default")))

extern "C" {
    CORE_EXPORT IUIEventHandler* GetIUIEventHandler();  
}

如果我希望另一个动态库项目能够链接到我的原始 Cocoa 应用程序,以便它可以使用导出的 GetIUIEventHandler 函数,我需要做什么?

我还需要将原始 Cocoa 应用程序构建为动态库吗?或者有没有办法链接可可应用程序的可执行文件?

4

2 回答 2

0

一个 Xcode 项目由多个目标组成。每个目标生产一个产品。产品类似于应用程序或共享库。

项目中的每个文件可以属于零个或多个目标,但通常属于一个。

我将重新组织您的项目以具有两个目标,一个是共享库或框架,另一个是应用程序。

您可能会在框架中使用大量通用代码,而在应用程序中只有非常特定于应用程序的概念。这通常具有澄清代码的副作用,并有助于维护一些良好的抽象。许多项目都是以这种方式构建的,即使该框架仅由一个客户使用,这样他们就可以从它引导您实现的更简洁的设计中受益。

于 2011-07-27T17:08:19.423 回答
0

这个答案有点脏,但它有效。我在需要从主应用程序可执行文件中导入函数的库上使用了链接器标志 -undefined dynamic_lookup,并且我没有链接到任何包含需要导入的函数的库中。

这迫使链接器不必担心未定义的符号并将它们标记为在加载时应链接。当应用程序加载我使用 -undefined dynamic_lookup 构建的库时,它将链接未定义的符号本身。

这是我找到答案的地方:http: //lists.apple.com/archives/xcode-users/2008/Dec/msg00002.html

于 2011-07-28T18:53:13.557 回答