2012-06-16 33 views
12

如何判斷在mac上是否使用libC++或libstdC++構建了庫?是在Mac上用libC++或libstdC++構建的庫

我一直在使用otool -L,但這似乎並沒有顯示它(MAC沒有LDD)

,如果我有庫X,我想知道如果我要重建它,因爲我從移動海灣合作委員會鏗鏘。我已經用GCC構建了一些庫,Mac庫一般是用clang AFAIK構建的。

回答

3

對於動態庫,如果它是針對該庫構建的(即,如果它是C++),則otool -L將顯示libstdc++

對於靜態庫,這個問題沒有意義。靜態庫不是針對其他庫而構建的。

你不應該因爲你正在改變編譯器而重建任何東西。只有一個系統範圍的C++庫,它具有穩定的ABI。

+0

嗯 - 您對ABI的評論在libC++ v中看起來不正確libstdC++ - http://stackoverflow.com/a/8457799/1460739 – user1460739

+0

問題不在於編譯器的改變,更在於標準的庫更改。 – user1460739

+1

另一個問題是有人專門編譯一個使用指定C++庫的程序,但是鏈接的庫不是針對相同的C++庫編譯的。如果您只是讓編譯器在不重寫它的情況下執行它的操作,那麼您將獲得系統stdC++庫以獲取所有內容,並且它可以正常工作。如果你重寫它,你必須以相同的方式覆蓋它的一切。 –

8

靜態庫nm -a helloworld.a | grep __1

如果你看到一個包含__1線,例如__121__basic_string,那麼該庫是用libC++編譯的。但是,如果沒有任何功能簽名使用C++標準庫類型,那麼這可能不起作用。

動態庫otool -L helloworld

查找着libC++或++的libstdc依賴dylib。

相關問題