0

我们有一些代码可以在 Mac OS X 上使用 makefile 使用 g++ 编译,但我无法使用 Xcode 成功构建。

这是项目设置的简要概述,有以下实例:

  1. 库A.a

    • 包含实现 func() 的 myclass_stub.cpp
    • 我们的 makefile 将使用 'ar -r' 打包库,这允许替换现有方法。
    • Xcode 会使用 libtool 来打包它
  2. program.exe 包含 myclass.cpp ,它也实现了 func() 。并使用 g++ 静态链接 libA.a

如果我要使用 Xcode 构建 libA.a 和 program.exe,它会在链接时抱怨 myclass_stub.o 和 myclass.o 中的“重复符号”函数。

我还尝试使用 Xcode 编译 program.exe,并将其与使用 'ar -r' 打包的 libA.a 链接,但它仍然抱怨重复符号。

重复实现可能并不理想,但我目前无法解决它。如果我可以使用标准 'ar' 和 'g++' 使用 makefile 构建代码,我想知道我需要在 Xcode 中设置哪些选项才能使其工作。

现在,我的问题:

  1. 我想使用 'ar -r' 将库打包到 Xcode 中。可能吗?如果是这样,怎么做?libtool 是否有类似的选项可以强制替换现有符号?

  2. 我想 libtool 和 'ar -r' 之间的区别可能不是使用 Xcode 和 makefile 构建的主要区别。我确实有相同的编译器标志,但输入/目标文件的列表很可能以不同的顺序排列。您是否看到此链接错误的任何其他可能的解决方案?

我看到了一个与 @libtool vs ar 创建静态库(xcode 链接器)相关的问题,但不是解决方案

顺便说一句,我也尝试添加 all-load 和 --force-load,但它们似乎并没有做太多,因为我只是想为 x86_64 构建。

4

1 回答 1

0

我对xcode一无所知,但是您是否考虑过将弱符号(在g ++中:属性((弱)))用于应该被覆盖的符号?

于 2011-03-22T20:51:55.927 回答