如何判斷在mac上是否使用libC++或libstdC++構建了庫?是在Mac上用libC++或libstdC++構建的庫
我一直在使用otool -L,但這似乎並沒有顯示它(MAC沒有LDD)
,如果我有庫X,我想知道如果我要重建它,因爲我從移動海灣合作委員會鏗鏘。我已經用GCC構建了一些庫,Mac庫一般是用clang AFAIK構建的。
如何判斷在mac上是否使用libC++或libstdC++構建了庫?是在Mac上用libC++或libstdC++構建的庫
我一直在使用otool -L,但這似乎並沒有顯示它(MAC沒有LDD)
,如果我有庫X,我想知道如果我要重建它,因爲我從移動海灣合作委員會鏗鏘。我已經用GCC構建了一些庫,Mac庫一般是用clang AFAIK構建的。
對於動態庫,如果它是針對該庫構建的(即,如果它是C++),則otool -L
將顯示libstdc++
。
對於靜態庫,這個問題沒有意義。靜態庫不是針對其他庫而構建的。
你不應該因爲你正在改變編譯器而重建任何東西。只有一個系統範圍的C++庫,它具有穩定的ABI。
靜態庫:nm -a helloworld.a | grep __1
如果你看到一個包含__1
線,例如__121__basic_string
,那麼該庫是用libC++編譯的。但是,如果沒有任何功能簽名使用C++標準庫類型,那麼這可能不起作用。
動態庫:otool -L helloworld
查找着libC++或++的libstdc依賴dylib。
嗯 - 您對ABI的評論在libC++ v中看起來不正確libstdC++ - http://stackoverflow.com/a/8457799/1460739 – user1460739
問題不在於編譯器的改變,更在於標準的庫更改。 – user1460739
另一個問題是有人專門編譯一個使用指定C++庫的程序,但是鏈接的庫不是針對相同的C++庫編譯的。如果您只是讓編譯器在不重寫它的情況下執行它的操作,那麼您將獲得系統stdC++庫以獲取所有內容,並且它可以正常工作。如果你重寫它,你必須以相同的方式覆蓋它的一切。 –