2

我们有一个用 C++ 编写的 Windows 应用程序,我们正在尝试将其中的一部分移植到 Mac OS X。我们的目标是将业务逻辑包装到一些库中,并在顶部为控制器和 GUI 构建一个 Cocoa 层。我们可能会有几个较小的应用程序使用相同的库,所以我们的第一个想法是为 C++ 代码使用动态库(除非有更好的方法)。但是,我们在实现这一目标时遇到了一些问题。我们的动态库符合要求(至少看起来是这样),并且我们得到了一个 .dylib 文件,我们在我们的应用程序中链接到该文件。问题是我们的应用程序根本找不到我们试图包含的任何 .h 文件。我们已经检查了 .h 文件是否正在导出,并检查了安装名称并确保库位于正确的目录中。此外,我们还关注了 Apple'

我的问题分为两部分:

  1. 是否有一些我们可能遗漏的明显步骤有助于公开我们应该先尝试的接口(即 .h 文件)?
  2. 我们确实怀疑问题可能出在我们在这个项目中继承的糟糕的 C++ 代码中。例如,有很多逻辑(方法的实现)直接写在 .h 文件中,在某些情况下甚至根本没有对应的 .cpp 文件。所以 .h 文件不仅仅是接口的描述。这可能不是(严重的)问题,因为我们的应用程序甚至无法从库中找到 .h 文件,它们至少应该存在。我们真的希望我们可以避免重写大量代码,因为需要移植的代码库非常大,而且(和往常一样)截止日期很近。

PS:到目前为止,我们只在 Xcode 4.2 中工作,还没有尝试使用命令行工具。

4

1 回答 1

1

选项1

在这种情况下,我只需将包含标头的目录添加到 Xcode 中标头或库的发现路径中。根据布局,某些方法会比其他方法更好。

通常,您将使用以下组合:

  • HEADER_SEARCH_PATHS
  • LIBRARY_SEARCH_PATHS
  • USER_HEADER_SEARCH_PATHS
  • 或者FRAMEWORK_SEARCH_PATHS

哪一个是正确的取决于您使用的库(例如,这些选项也会影响链接器)。定义发现路径时,可以添加后缀**来表示递归搜索。

这是理想的,因为您将更少的麻烦保持您的 xc 项目与他们的 vs 解决方案同步。

选项 2

有些人真的很喜欢对其包含的拖放支持......我不喜欢,但如果有太多的混乱,你不能只做一些像添加搜索路径这样简单的事情,那就是这种方法:

  • 将您需要的标题添加到项目中
  • 将这些标头添加到目标的复制标头构建阶段
  • 重复直到它构建并在您合并/拉取它们的更新时为损坏做好准备。

如果标头名称发生冲突,当您想要重用库时,它会很快变得混乱,并且需要数小时才能重建。

于 2011-10-26T07:55:33.393 回答