mac OS X 10.10更新gcc 4.9.1后默认无法编译连接的问题
MAC OS X10.10升级前使用的低版本的gcc(好像是4.7.x),正常编译可以完成,不过会出现警告:
couldn't understand kern.osversion `14.0.0'
网友说好像是Xcode版本过低(使用的是Xcode6 beta4),现在正在升级Xcode 6.1。与此同时,使用HomeBrew升级最新的gcc 4.9.1(X86_64)。后来编译时发现gcc老是跑到clang上去!检查发现原来的gcc文件被删,在PATH中靠后的gcc在/usr/bin中被链接到clang中。遂修复gcc4.9.1的连接,然后编译一个简单的c源代码,出现如下错误:
apple@kissAir: c_src$gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/4.9.1/libexec/gcc/x86_64-apple-darwin14.0.0/4.9.1/lto-wrapper
Target: x86_64-apple-darwin14.0.0
Configured with: ../configure --build=x86_64-apple-darwin14.0.0 --prefix=/usr/local/Cellar/gcc/4.9.1 --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-4.9 --with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr --with-mpc=/usr/local/opt/libmpc
--with-cloog=/usr/local/opt/cloog --with-isl=/usr/local/opt/isl --with-system-zlib --enable-version-specific-runtime-libs --enable-libstdcxx-time=yes --enable-stage1-checking --enable-checking=release --enable-lto --disable-werror --with-pkgversion='Homebrew
gcc 4.9.1' --with-bugurl=https://github.com/Homebrew/homebrew/issues --enable-plugin --disable-nls --enable-multilib
Thread model: posix
gcc version 4.9.1 (Homebrew gcc 4.9.1)
apple@kissAir: c_src$gcc -std=c11 -o x x.c
Undefined symbols for architecture x86_64:
"start", referenced from:
-u command line option
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
网上搜了一下,有人说是代码中某些函数名写错了,但我这个显然不是这个原因。看错误字面意思可能是少链接了某个启动库导致,可以通过-v比较clang的最后命令行(因为clang不出错),但为了图懒省事还是罢了。于是通过搜索找到这个连接:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54423 (顺面BS某娘和某Bxxg,根本找不到,还是用某哥FQ啊),其中和我的现象完全相同,遂加上-lcrt1.o,于是错误消失鸟。nm
crt1.o发现其中的确有start符号:
apple@kissAir: c_src$nm /usr/lib/crt1.o
0000000000000170 s EH_Frame1
000000000000012a s LC1
000000000000012b s LC2
0000000000000158 s LC3
00000000000001c8 S _NXArgc
00000000000001d0 S _NXArgv
U ___dso_handle
U ___keymgr_dwarf2_register_sections
00000000000001e0 S ___progname
U __cthread_init_routine
0000000000000124 T __dyld_func_lookup
0000000000000022 T __start
U _atexit
00000000000001d8 S _environ
U _errno
U _exit
U _mach_init_routine
U _main
0000000000000110 T dyld_stub_binding_helper
0000000000000188 s func.eh
0000000000000000 T start
但是用clang正常连接无此问题,貌似也不会连接到crt1.o,不知道gcc为啥一定要连crt1.o,而为啥又默认不加上crt1.o?下面是2种编译器的编译后的符号表:
apple@kissAir: c_src$nm x_gcc x_clang
x_gcc:
0000000100001058 S _NXArgc
0000000100001060 S _NXArgv
U ___keymgr_dwarf2_register_sections
0000000100001070 S ___progname
U __cthread_init_routine
0000000100000e68 t __dyld_func_lookup
0000000100000000 A __mh_execute_header
0000000100000d66 t __start
U _atexit
0000000100001068 S _environ
U _errno
U _exit
U _mach_init_routine
0000000100000e70 S _main
U _printf
U _puts
U _sleep
0000000100000e54 t dyld_stub_binding_helper
0000000100000d44 T start
x_clang:
0000000100000000 T __mh_execute_header
0000000100000f00 T _main
U _printf
U _puts
U _sleep
U dyld_stub_binder
并且clang编译后的大小明显小于gcc:
-rwxr-xr-x 1 apple staff 8.4K 10 27 09:54 x_clang
-rwxr-xr-x 1 apple staff 8.6K 10 27 09:53 x_gcc
还在更新Xcode,看更新完gcc默认是否可以编译通过哦!
更新完Xcode后gcc仍然默认不行,不知哪位可以给出解决办法,让其默认编译通过?
mac OS X 10.10更新gcc 4.9.1后默认无法编译连接的问题的更多相关文章
- 在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目
终于有时间在 Mac 上安装一下 ASP.NET 5,网上有许多教程,但是多数的时间比较早了,版本不是最新,搭着 Build 2015 的春风,我也实践一下 Mac OS X 上的 ASP.NET 5 ...
- Mac OS X Yosemite 10.10 配置 Apache+PHP 教程注意事项
刚更新到了 Mac OS X Yosemite 10.10,发现运行Apache出现了一些问题,修正一下! 教程基于 Mac OS X Mavericks 10.9.X,移步:Mac OS X Mav ...
- Vmare12(虚拟机)安装Mac OS X Yosemite 10.10
需要预备的软件如下: OSX10.10的系统镜像,下载好之后将后缀.cdr改成.iso,下载来源如下: 链接:http://pan.baidu.com/s/1sj4ri5R 密码:y86w un ...
- [视频]MAC OS 技巧之如何更新及重装MAC系统
mac os是当今最好用的桌面操作系统,但再好的系统也有新版本发布的一天,或者被极客的你尝试各种设置而配置混乱了,这时我们就要进行系统更新或者重装了. 系统更新 Mac OS有新版本推出时,会自动在A ...
- vmware 12中安装MAC OS X Lion 10.7
下载并安装vmware. 下载并安装MAC补丁. 创建虚拟机. 设置ISO文件. 开启虚拟机. 安装vmware tools. 1. 下载并安装vmware.我是直接在腾 ...
- [MAC]OS X Mavericks 10.9.5 / 10.10.2 VMWare vmdk镜像,解压就能用!
用起来是比VirtualBox好使很多: 1.鼠标很灵敏,不像Vbox那么飘 2.显卡有驱动,VM可以配置显示器尺寸,完美支持网络.语音.视频,直接搞全屏,还能看电影 3.USB设备支持热插拔 4.支 ...
- 苹果 Mac OS X Yosemite 10.10 新功能特性总结 - 扁平化、主打跨设备的无缝连通性
苹果在2014.06.03凌晨的 WWDC 2014 大会上正式发布了最新的 OS X Yosemite 桌面操作系统和 iOS 8 移动系统.虽然整场发布会的重心都在软件上,并没有硬件亮相,但软件上 ...
- MAC OS升级到10.11(OS X EICAPTION)之后CocoaPods不能正常使用的问题解决
昨晚回家之后开始升级系统到10.11,下载了一整个晚上之后终于在早上下载完毕,早上带到公司,想查一个第三方库的时候却遇到了问题: guoyufudeMacBook-Pro:~ GuoYufu$ pod ...
- 在 Mac OS X Yosemite 10.10.5 上配置 OpenGL 编程环境
这个教程主要参考了youtube上的视频 Getting Started in OpenGL with GLFW/GLEW in Xcode 6 ,这个视频有点问题,不能照搬.本人通过自己摸(瞎)索( ...
随机推荐
- 18 UI美化layer-list
layer-list 用于叠加两张图片 或者设置 RatingBar(评分) 进度条 相框等 在工程文件中的res/drawable/新建一个layer-list(叠加两张图片) 如下 : <? ...
- xml的今生今世
跟随小编学习的脚步,今天小编来简单总结一下xml的今生今世,xml百度百科对她这样诠释到:可扩展标记语言 (ExtensibleMarkup Language, XML),用于标记电子文件使其具有结构 ...
- SVM及其c++代码运用实例
最近做个小东西,要用到SVM,搜索网上,发现大伙都是各种介绍理论,让我等小码农晕头转向,是故自己学习总结一下,并将代码实例展示出来,方便大家共同探讨,该代码是用opencv编写的,很容易学习滴. 1. ...
- 【UNIX网络编程第三版】阅读笔记(一):代码环境搭建
粗略的阅读过<TCP/IP详解>和<计算机网络(第五版)>后,开始啃这本<UNIX网络编程卷一:套接字联网API>,目前linux下的编程不算太了解,在阅读的过程中 ...
- Socket编程实践(11) --epoll原理与封装
常用模型的特点 Linux 下设计并发网络程序,有典型的Apache模型(Process Per Connection,PPC), TPC(Thread Per Connection)模型,以及 se ...
- 开始ITGEGE教育社区的视频录制----嵌入式基础知识讲解
从8月份开始,陆陆续续要对我的第一份兼职工作ITGEGE讲师做教学视频录制了,本人水平有限,我只讲一些开发在工作中的应用,其它细节的东西不做深究,毕竟本人工作经验和精力也有限,白天要上班,特别是最近又 ...
- BottomSheet底部动作条使用
底部动作条 底部动作条(Bottom Sheets)是一个从屏幕底部边缘向上滑出的一个面板,使用这种方式向用户呈现一组功能.底部动作条呈现了简单.清晰.无需额外解释的一组操作. 使用环境 底部动作条( ...
- UIView、UIViewLayout UI_01
1.首先:在UI里面我们使用的是MRC,需要把ARC改成NO: 若学习比较吃力,可以先学习一下基础: http://blog.sina.com.cn/s/blog_814ecfa90102vuzg.h ...
- java文件的基本操作示例
一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{ System.out.println("请输入您的 ...
- 第一篇、vlc-android之开篇介绍
转载请注明出处:http://blog.csdn.net/cuiran/article/details/30054835 最近一直研究android的视频直播部分,从最开始的直接播放本地视频文件,到使 ...