首先,我在MAC OS X 10.6上使用Xcode 3.2.5
我有一个构建并运行良好的Cocoa Application项目。我在这个项目中有一些函数可以使用:
导出#define CORE_EXPORT __attribute__ ((visibility ("default")))
extern "C" {
CORE_EXPORT IUIEventHandler* GetIUIEventHandler();
}
如果我希望另一个动态库项目能够链接到我原来的Cocoa应用程序,以便它可以使用导出的GetIUIEventHandler函数,我需要做什么?
我是否还需要将原始Cocoa应用程序构建为动态库?或者有没有办法链接Cocoa应用程序的可执行文件?
答案 0 :(得分:0)
单个Xcode项目由多个目标组成。每个目标生产一种产品。产品类似于应用程序或共享库。
项目中的每个文件都可以属于零个或多个目标,但通常属于一个。
我会重新组织你的项目有两个目标,一个是共享库或框架,另一个是应用程序。
您可能最终会在框架中使用许多通用代码,并且应用程序中只有非常特定于应用程序的概念。这通常具有澄清代码的副作用,并有助于保持一些良好的抽象。许多项目都是以这种方式构建的,即使框架仅由一个客户使用,这样他们也可以获得它指导您的清洁设计的好处。
答案 1 :(得分:0)
这个答案有点脏,但它有效。我在我的库上使用了链接器标志-undefined dynamic_lookup,它需要从主应用程序可执行文件中导入函数,而且我没有链接到任何包含需要导入的函数的库中。
这会强制链接器不要担心未定义的符号,并将它们标记为应在加载时链接。当应用程序加载我使用-undefined dynamic_lookup构建的库时,它将链接未定义的符号本身。
这是我找到答案的地方: http://lists.apple.com/archives/xcode-users/2008/Dec/msg00002.html