8

このファイル p3.cxx をコンパイルすると、次のようになります。

class foobarclass
{
 public:
  int i0;
};

void otherfun(void);
void mumble(void);

void fun(void)
{
  try {
    otherfun();
  } catch(foobarclass &e) {
    mumble();
  }
}

このような:

xcrun clang++ -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -fexceptions -c p3.cxx -p3.64.o

xcrun clang++ -arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -fexceptions -c p3.cxx -o p3.32.o

次に、「foobarclass の typeinfo」のシンボルを確認します。

nm -m p3.64.o|grep ZTI
0000000000000110 (__DATA,__datacoal_nt) weak private external __ZTI11foobarclass

nm -m p3.32.o|grep ZTI
00000134 (__DATA,__datacoal_nt) weak external __ZTI11foobarclass

arm64の場合、シンボルが弱いプライベート外部なのはなぜですか? これは、実行時に dlsym() がそれを見つけられないことを意味します。これは、LibreOffice コードベースの特定の低レベルのものを破壊します。

4

2 に答える 2

1

関連する Apple Developer フォーラムで同じ質問をしたところ、実行可能ファイルでグローバルに表示されるシンボルの数を減らすために、これは意図的であるという回答がありました。だから私はそれと一緒に暮らす必要があります。

于 2014-01-22T10:32:17.213 に答える