linker command failed with exit code 1 (use -v to see invocation)解決辦法

問題如下:


報錯信息顯示是連接時發生了錯誤,並且可以看到有編譯後產生的目標文件如AACPlayer.o等,也證明編譯過程沒有出現問題。

網上找了好多文章,大部分說的都是關於第三方庫,或者導入文件重複的問題

文章的傳送門在這裏:文章鏈接


但是如果你的像我的一樣,並沒有使用第三方或者其他問題都被排除了 且還是沒有解決問題的話,那麼請接下去看,這裏是我對剛纔那篇文章的補充:

檢查工程裏面是否使用了全局變量,如果這個工程中有同名的全局變量時,也會報以上的錯誤。如:


在ViewController.m 和AACPlayer.m文件裏,都用了一個名爲“port”的全局變量

雖然在各自的文件裏它們都能被使用,編譯器編譯時也能夠編譯,但是一旦到了鏈接時,就會報以上的錯誤


原因

這是因爲:鏈接時,整個工程的函數和全局變量是外鏈接屬性,即每個函數和全局變量 將來在整個工程所有的文件都能夠被訪問,可以粗略地理解爲“合爲一體”,因此報同名衝突。


解決辦法:

1. 把沒有到的全局變量註釋掉。

如註釋掉AACPlayer.m中的port。build,成功


2. 將明顯不會在其他文件中引用的函數或者全局變量 用“static”關鍵字修飾,使之鏈接屬性改成內鏈接。

如將AACPlayer.m中的port(或者ViewController.m)前面用“static”修飾,build,成功。


到此結束



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章