免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: osmanthusgfy
打印 上一主题 下一主题

[C] X86 64平台gcc编译32位的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-08-26 12:28 |只看该作者
那怎么在Makefile写了?
我试了在生成TARGET时加上-m32不行:那link时,Makefile到底应该怎么写了?
谢谢!! ...
osmanthusgfy 发表于 2011-08-26 12:08



    你的系统环境,出错信息。另外看看你有没有装32位兼容库。

论坛徽章:
0
12 [报告]
发表于 2011-08-26 14:52 |只看该作者
你的系统环境,出错信息。另外看看你有没有装32位兼容库。
oooooxxxxx 发表于 2011-08-26 12:28

我系统是Mac OS X,64位的,
出错信息为

  1. ld: warning: in Obj/Main.o, file was built for i386 which is not the architecture being linked (x86_64)
  2. Undefined symbols:
  3.   "_main", referenced from:
  4.       start in crt1.10.6.o
  5. ld: symbol(s) not found
  6. collect2: ld returned 1 exit status
  7. make: *** [App/aa] Error 1
复制代码
系统装有32位兼容库,我用xcode可以编译32位的.

论坛徽章:
0
13 [报告]
发表于 2011-08-26 14:53 |只看该作者
help,自己顶!

论坛徽章:
0
14 [报告]
发表于 2011-08-26 15:36 |只看该作者
  1. $ gcc -m32 -o t t.c
  2. $ file t
  3. t: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
复制代码

论坛徽章:
0
15 [报告]
发表于 2011-08-26 15:46 |只看该作者
我用file命令查看目标文件:
file ./Obj/Main.o
输出为:
./Obj/Main.o: Mach-0 object i386
证明编译32位的目标文件是成功的,就是链接的时候出错了.
该怎么解决了?!
help!!!

论坛徽章:
0
16 [报告]
发表于 2011-08-27 00:40 |只看该作者
我系统是Mac OS X,64位的,
出错信息为系统装有32位兼容库,我用xcode可以编译32位的.
osmanthusgfy 发表于 2011-08-26 14:52



    这就奇怪了,我在10.6.8上只要gcc -m32 就可以link32位程序的。

论坛徽章:
0
17 [报告]
发表于 2011-08-27 12:38 |只看该作者
这就奇怪了,我在10.6.8上只要gcc -m32 就可以link32位程序的。
oooooxxxxx 发表于 2011-08-27 00:40

我在程序中用到了Mac OS上的framework(  CoreFoundation, CoreServices ) 了,可能是链接的是默认去找64位的framework了,
链接的时候怎样指定32位的framework了?
谢谢!!!

论坛徽章:
0
18 [报告]
发表于 2011-08-27 15:26 |只看该作者
结贴,总结:
问题的原因有两个:
1>.链接的时候没有指定-m32参数,这是主要原因;
2>.Makefile本身写的有问题,原因可能是我定义了一些没用到系统变量,把一些默认的值给覆盖了,我删掉那些没用到的变量就OK了

附上修改后的Makefile,并感谢oooooxxxxx大哥热心的帮助!!!(话说大哥的昵称为什么起名叫xxxxxooooo)

  1. CXXFLAGS = -m32 -arch i386 -O2  -g -Wall -fmessage-length=0

  2. OBJS = Obj/Main.o

  3. TARGET = App/aa
  4.         
  5. Obj/Main.o: Src/Main.cc
  6.         $(CXX) $(CXXFLAGS) -c -o Obj/Main.o Src/Main.cc

  7. $(TARGET): $(OBJS)
  8.         $(CXX) -m32 -o  $(TARGET) $(OBJS) $(LDFLAGS) $(LIBS)

  9. all:        $(TARGET)

  10. clean:
  11.         rm -f $(OBJS) $(TARGET)
复制代码

论坛徽章:
0
19 [报告]
发表于 2011-08-28 01:30 |只看该作者
结贴,总结:
问题的原因有两个:
1>.链接的时候没有指定-m32参数,这是主要原因;
2>.Makefile本身写的有问题 ...
osmanthusgfy 发表于 2011-08-27 15:26



    这种情况一般把CXX定义为"g++ -m32"而不是放到CXXFLAGS里面

论坛徽章:
0
20 [报告]
发表于 2011-08-28 16:54 |只看该作者
这种情况一般把CXX定义为"g++ -m32"而不是放到CXXFLAGS里面
oooooxxxxx 发表于 2011-08-28 01:30



    ???FLAGS一般是编译参数,不是链接参数
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP