0

makefile を使用して Mac OS X で g++ を使用して正常にコンパイルできるコードがいくつかありますが、Xcode では正常にビルドできません。

Here is the brief overview of the project setup, there are instances of the following:

  1. libA.a

    • contains myclass_stub.cpp which implements func()
    • Our makefiles would package the library with 'ar -r', which allows replacement of existing methods.
    • Xcode would use libtool to package it
  2. program.exe contains myclass.cpp which implements func() as well. and links libA.a statically using g++

If I were to build libA.a and program.exe with Xcode, it complains about "Duplicate symbol" func in myclass_stub.o and myclass.o at link time.

I also tried compiling program.exe with Xcode, and linking it against libA.a that was packaged with 'ar -r', but it stills complains about duplicate symbol.

重複した実装は理想的ではないかもしれませんが、現時点では回避できません。標準の 'ar' と 'g++' を使用して makefile でビルドするコードを取得できた場合、それを機能させるために Xcode で設定する必要があるオプションを知りたいです。

さて、私の質問:

  1. 代わりに「ar -r」を使用してライブラリを Xcode にパッケージ化したいと思います。出来ますか?もしそうなら、どのように?既存のシンボルを強制的に置換できる libtool の同様のオプションはありますか?

  2. libtool と 'ar -r' の違いは、Xcode でのビルドと makefile でのビルドの主な違いではないかもしれません。私は同じコンパイラ フラグを持っていますが、入力/オブジェクト ファイルのリストはほとんどの場合、異なる順序になっています。このリンク エラーに対して他に考えられる解決策はありますか?

関連する質問 @ libtool vs ar for creating a static library (xcode linker)を見ましたが、解決策ではありません

ちなみにall-loadと--force-loadもつけてみましたが、x86_64向けにビルドするだけなのであまり効果がないようです。

4

1 に答える 1

0

xcodeについては何も知りませんが、オーバーライドする必要があるシンボルに弱いシンボル( g++ : attribute ((weak))) を使用することを考えましたか?

于 2011-03-22T20:51:55.927 に答える