2013-09-25 100 views
14

像以前提到的here,___sincos_stret在使用Xcode5命令行工具編譯使用此符號的項目時無法找到。___sincos_stret鏈接時未定義的符號

在上面引用的線程中,發佈了針對IOS目標(將-miphoneos-version-min=5.0傳遞給編譯器)的解決方案,是否有針對桌面(x64)目標的解決方案?

例如,在嘗試編譯polycode時發生了這種情況。

編輯2:

奇怪的是,在編譯手動以前的錯誤中引用的庫之後,誤差現在恰好位於在lto.o,這是一個內部LLVM頭本身...

undef: ___sincos_stret 
Undefined symbols for architecture x86_64: 
    "___sincos_stret", referenced from: 
     _mdct_init in lto.o 
     _dradfg in lto.o 

我使用Xcode 5運行OSX 10.9 DP。This is the link step

+0

請寫一個自包含的問題不參照其他的線程。 – lpapp

+1

@LaszloPapp它似乎是Xcode5的一個普遍問題,我不知道如何讓這個問題更加自我包含,除了將其他線程的答案粘貼到其中。 – Appleshell

+0

請複製並粘貼,但只有嚴格相關的部分。 – lpapp

回答

3

這似乎是取消並重新安裝Xcode5 DP和OSX 10.9命令行工具解決了這個問題。我想從以前的版本更新有問題。

+1

爲什麼這個答案被接受?這是不正確的...... – trojanfoe

+0

@trojanfoe因爲這是什麼修復了這個問題。 – Appleshell

+0

請你能詳細解釋一下你如何「卸載」Xcode和CL工具?你是否簡單地刪除了Xcode並重新安裝它,還是你必須做其他事情? – Chris

13

stret是蘋果公司發言的「返回結構」。 ___sincos_stret是一個LLVM優化 - 如果您編寫的代碼調用sin(n),然後cos(n)並使用這兩個結果,則編譯器將對結構返回的sincos方法進行一次調用,從而接收包含這兩種結果的結構。如果操作數是相同的,那麼一次完成而不是單獨完成要更快。

在膚淺的瀏覽中,我看不到中的sincos,但我預計內容中會有內容。

雖然閒逛我想:

cd /Applications/Xcode.app/Contents/Developer/Platforms 
grep -lr ___sincos_stret * 

通過這一點,就可能導致使用nm,我發現___sincos_stret功能在兩個iOS版,因爲7.0和OS X自10.9暴露自己libsystem_m.dylib S的一部分。例如。如果你的Xcode是安裝在默認的地方,嘗試:

nm /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/usr/lib/system/libsystem_m.dylib | grep sincos 

和/或:

nm /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/lib/system/libsystem_m.dylib | grep sincos 

你會看到在任者的象徵。因此,正確的解決方案是在Xcode中設置一個較舊的部署目標,或者在makefile中執行相同的操作。

+0

我很確定我爲OSX構建。我使用項目中的cmake文件並使用make編譯項目。我將添加問題中的一個錯誤。 – Appleshell

+1

'__sincos_stret'符號由OS X上的'/ usr/lib/system/libsystem_m.dylib'提供,就像iOS一樣。提問者的問題是編譯器在一個或多個目標文件中生成符號,因爲在編譯步驟中沒有指定目標操作系統版本(所以它默認爲主機系統版本),但鏈接步驟指定的操作系統版本<10.9 ,其上的符號不可用。 –

+0

@StephenCanon 10.9是目前在NDA下的beta版本,對不對?所以我沒有找到這個符號,因爲我沒有beta SDK,但它已經被編譯器替代了,因爲很多其他人都這樣做了? – Tommy

6

你想要-mmacosx-version-min=10.8(或任何你的目標操作系統版本)。

+1

這似乎是有道理的,但即使我在每個cmake命令中將參數添加到CXXFLAGS,錯誤仍然存​​在。做錯了,雖然 - [這是我目前做這個案子的程序](http://pastebin.com/J7qmNegN)(目前無法與其他項目一起測試) – Appleshell

+0

您是否嘗試過使用基於curses的界面'ccmake' ? – Gerard

+1

當使用舊版OS X SDK連接到ICU時,剛剛遇到了這個問題,在CPPFLAGS **中設置了'-isysroot'和'-mmacosx-version-min', *'LDFLAGS'。 – Eric3

2

在文本編輯器 /opt/local/etc/macports/macports.conf 並添加下列文件中有一個線,如

# MACOSX_DEPLOYMENT_TARGET - osx version to be compatible with earlier OSX version. 
macosx_deployment_target   10.8 
MACOSX_DEPLOYMENT_TARGET   10.8 
相關問題