作者yin0416 (铅笔)
看板C_and_CPP
标题[问题] undefined symbols for architecture
时间Thu Sep 14 16:40:39 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1505378442.A.258.html
1F:推 shadow0326: 旧程式大概是32bit的吧 编译参数加上-m32看看吧 09/14 17:11
2F:→ shadow0326: 不保证你的编译环境支援就是了 09/14 17:11
3F:→ yin0416: 请问是打 gcc -m32 program.c 吗? 09/14 17:19
4F:→ yin0416: 还是失败了,谢谢 09/14 17:22
5F:推 he103958: 有把档案加进专案里面吗 09/14 18:00
6F:→ yin0416: 应该是没有,我只是把所有相关程式放在同一个资料夹内, 09/14 18:34
7F:→ yin0416: 然後用终端机下指令。 09/14 18:34
8F:→ yin0416: 请问如何放进专案内?有教学网站吗?谢谢 09/14 18:35
9F:→ enonrick: 有用到非原生lib,能把makefile 贴上来吗 09/15 09:57
10F:→ yin0416: sorry, 我不懂 makefile,正在上网查中 09/15 14:38
11F:→ Lipraxde: 你不会是编译的时候一个一个慢慢下指令吧@@ 09/15 14:44
12F:→ yin0416: 所以不是只要编译一个程式就好喔~ 09/15 15:08
13F:→ Lipraxde: 编译参数改变的话,基本上所有档案最好都重新编译,你是 09/15 17:27
14F:→ Lipraxde: 不是把之前的.o档跟新编译的混在一起link? 09/15 17:27
15F:→ yin0416: 所以要删掉 .o 的档案吗? 09/15 22:18
16F:→ yin0416: 所以逻辑是删掉 .o 的档案,把资料夹内的 .c 档案都编译 09/16 04:06
17F:→ yin0416: 一遍吗? 09/16 04:06
18F:→ Lipraxde: 不用删吧,重编的时候就会盖过去了,不过我不确定一定可 09/16 12:33
19F:→ Lipraxde: 以解决你的问题喔,昨天搞很久都搞不出你这个情况 09/16 12:33
20F:→ yin0416: 我现在试着一个一个编译,有些成功,有些失败。好像跟编 09/16 14:33
21F:→ yin0416: 译的顺序也有关。 09/16 14:33
22F:→ Lipraxde: 你要不要考虑多提供些资讯,譬如说你专案长什麽样、新的 09/16 14:58
23F:→ Lipraxde: 错误讯息之类的? 09/16 14:58
我愿意提供所有的讯息,但我不知道什麽讯息才是重要的。
这个程式是拿来模拟揉纸。
整理一下我的逻辑。
资料夹内的程式可能有相关性,
所虽然都是 .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
24F:→ Lipraxde: .o是目的档,你可能需要了解一下编译、连结的流程,或是 09/17 00:36
25F:→ Lipraxde: 用xcode之类的IDE。然後如果你用gcc7.1编译出了一堆问题 09/17 00:36
26F:→ Lipraxde: ,那不仿换成你之前用的版本相近的gcc看看 09/17 00:36
27F:→ yin0416: 谢谢你的建议,我对 C 实在是不熟悉,再嚐试看看。 09/17 01:03