[問題] undefined symbols for architecture

看板C_and_CPP作者 (鉛筆)時間8年前 (2017/09/14 16:40), 8年前編輯推噓2(2025)
留言27則, 5人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) macOS Sierra 10.12.6 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) 在 windows 97 用 gcc 3.4 左右寫的吧 我則是用 gcc version 7.1.0 要編譯它 問題(Question): 原本用 gcc 指令編譯程式時有一個問題 會出現找不到 omp.h 這個文件的訊息, 但後來照著網路上的教學,裝了 gcc 7.1.0 這個問題就解決了。 但還又有新的訊息 Undefined symbols for architecture x86_64 "_calculateBend" , reference from: _ComputeForces in ccBysBIi.o ld: symbol(s) not found for architecture x86_64 collect2: 錯誤:ld 回傳 1 我上網查了很久,別人也有相同問題,但還是不知道該如何解決。 希望有人能給我指引,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.114.123.158 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1505378442.A.258.html

09/14 17:11, , 1F
舊程式大概是32bit的吧 編譯參數加上-m32看看吧
09/14 17:11, 1F

09/14 17:11, , 2F
不保證你的編譯環境支援就是了
09/14 17:11, 2F

09/14 17:19, , 3F
請問是打 gcc -m32 program.c 嗎?
09/14 17:19, 3F

09/14 17:22, , 4F
還是失敗了,謝謝
09/14 17:22, 4F

09/14 18:00, , 5F
有把檔案加進專案裡面嗎
09/14 18:00, 5F

09/14 18:34, , 6F
應該是沒有,我只是把所有相關程式放在同一個資料夾內,
09/14 18:34, 6F

09/14 18:34, , 7F
然後用終端機下指令。
09/14 18:34, 7F

09/14 18:35, , 8F
請問如何放進專案內?有教學網站嗎?謝謝
09/14 18:35, 8F

09/15 09:57, , 9F
有用到非原生lib,能把makefile 貼上來嗎
09/15 09:57, 9F

09/15 14:38, , 10F
sorry, 我不懂 makefile,正在上網查中
09/15 14:38, 10F

09/15 14:44, , 11F
你不會是編譯的時候一個一個慢慢下指令吧@@
09/15 14:44, 11F

09/15 15:08, , 12F
所以不是只要編譯一個程式就好喔~
09/15 15:08, 12F

09/15 17:27, , 13F
編譯參數改變的話,基本上所有檔案最好都重新編譯,你是
09/15 17:27, 13F

09/15 17:27, , 14F
不是把之前的.o檔跟新編譯的混在一起link?
09/15 17:27, 14F

09/15 22:18, , 15F
所以要刪掉 .o 的檔案嗎?
09/15 22:18, 15F

09/16 04:06, , 16F
所以邏輯是刪掉 .o 的檔案,把資料夾內的 .c 檔案都編譯
09/16 04:06, 16F

09/16 04:06, , 17F
一遍嗎?
09/16 04:06, 17F

09/16 12:33, , 18F
不用刪吧,重編的時候就會蓋過去了,不過我不確定一定可
09/16 12:33, 18F

09/16 12:33, , 19F
以解決你的問題喔,昨天搞很久都搞不出你這個情況
09/16 12:33, 19F

09/16 14:33, , 20F
我現在試著一個一個編譯,有些成功,有些失敗。好像跟編
09/16 14:33, 20F

09/16 14:33, , 21F
譯的順序也有關。
09/16 14:33, 21F

09/16 14:58, , 22F
你要不要考慮多提供些資訊,譬如說你專案長什麼樣、新的
09/16 14:58, 22F

09/16 14:58, , 23F
錯誤訊息之類的?
09/16 14:58, 23F
我願意提供所有的訊息,但我不知道什麼訊息才是重要的。 這個程式是拿來模擬揉紙。 整理一下我的邏輯。 資料夾內的程式可能有相關性, 所雖然都是 .c 的副檔名,但我必需把它編譯成 .o 的執行檔。 惟一的例外是 crumpling.c 的程式,編譯後的執行檔為 crumpling.out 。 這個程式在 windows 中能編譯,其 .exe 檔也能執行。 但在我的 Mac 筆電中卻不行,一開始編譯出現找不到 'omp.h' 的訊息, 後來裝了新版的 gcc 7.1.0 後就沒有這個訊息了,取而代之的是 Undefined symbols for architecture x86_64 "_calculateBend", referenced from: _ComputeForce in ccybGJGF.o ld: symbol(s) not found for architecture x86_64 collect2: 錯誤: ld 回傳 1 但是我找不到 ccybGJGF.o 這個檔案。 之後我刪除了所有的 .o 檔案,開始重新一個一個指令的編譯資料夾內的所有檔案, 但是很多檔案不能編譯,甚至出現警告訊息,例如 警告: 隱念宣告函式 「fabs」 [Wimplicit-function-declaration] 之類的訊息。 然後我發現有些我原本不能編譯的程式,不知道是不是因為編了某些程式, 後來就可以編譯了。 以上,不知道我應該要再提供什麼訊息比較好?謝謝。 ※ 編輯: yin0416 (122.116.53.63), 09/16/2017 22:18:20

09/17 00:36, , 24F
.o是目的檔,你可能需要了解一下編譯、連結的流程,或是
09/17 00:36, 24F

09/17 00:36, , 25F
用xcode之類的IDE。然後如果你用gcc7.1編譯出了一堆問題
09/17 00:36, 25F

09/17 00:36, , 26F
,那不仿換成你之前用的版本相近的gcc看看
09/17 00:36, 26F

09/17 01:03, , 27F
謝謝你的建議,我對 C 實在是不熟悉,再嚐試看看。
09/17 01:03, 27F
文章代碼(AID): #1Pka2A9O (C_and_CPP)