mac OX 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源代码,出现如下错误:

[email protected]: 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)

[email protected]: 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,根本找不到,还是用某哥翻墙啊),其中和我的现象完全相同,遂加上-lcrt1.o,于是错误消失鸟。nm
crt1.o发现其中的确有start符号:

[email protected]: 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种编译器的编译后的符号表:

[email protected]: 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默认是否可以编译通过哦!(稍后更新结果)

时间: 2024-11-09 07:56:57

mac OX 10.10更新gcc 4.9.1后默认无法编译连接的问题的相关文章

vmware 11 安装MAC OS X 10.10.5 开机卡logo界面问题

我用的vmware 11 安装的 mac ox x 10.10.2,安装以后能正常运行,而后升级到10.10.5,至于安装的教程百度已经很多了,而且比较详细,再次不详述, http://jingyan.baidu.com/article/ff411625b9011212e48237b4.html     这篇教程自我感觉是不错的,下面说下我这个问题, 我装好Yosemite 以后做了一个快照,vmware 11不知道咋回事不能往其他盘里面装,只能装在C盘,在我电脑上是这样(win 8.1),也许

Mac OS X 10.10更新及体验

前一阵子,更新了Mac OS 10.10 Yosemite,总体用起来感觉还是很不错的,是很值得升级,相对于10.9 Mavericks优化了不少东西.我之前写的使用教程有一些也就不适用了:比如更换Dashboard中的背景,10.10中Dashboard的背景已经改为了当前壁纸的模糊图像.我这个人对系统要求比较高,不合意的系统用不惯,所以观望了一阵子才升级. 下面先说一下Mac OS 10.10 Yosemite的更新体现的一些地方,我说的应该不是全面的,更加具体的细节大家可以去苹果官网查看一

Mac OSX 10.10 - Yosemite更新svn版本

问题:在命令行下对项目进行版本管理操作,结果报这样的错: svn: E155021: This client is too old to work with the working copy at'/Users/user/works/v1baobao4iphone' (format 31).You need to get a newer Subversion client. For more details, see http://subversion.apache.org/faq.html#w

Mac OS X 10.10 使用技巧 持续更新

作为一个学习 iOS 开发的人,Mac 是必备工具,俗话说,工欲善其事,必先利其器,下面是一些 Mac OS X 10.10 的使用技巧 终端别名 为终端设置别名可以一定程度上方便使用 在终端输入 'vim ~/.bash_profile',然后按下 'I' 进入编辑模式   // 编辑文件,如没有则创建 在文件中输入 alias 别名='原命令'    // 以此为格式,一个别名一行 按 'ESC' 退出编辑模式,输入 ':x' 保存并退出 vim 编辑器 在终端输入 'source ~/.b

Mac OS X10.10 下安装caffe

Mac OS X10.10 下安装caffe [email protected] http://blog.csdn.net/surgewong 在Linux学习 Caffe[1]有一段时间了,也渐渐地对 Caffe 的框架有了一点认识.在 Linux 下学习 Caffe 的人很多,网上的参考资料也想对比较多.安装配置教程很多,出了问题都相对比较好解决.前两天老大弄了一台Mac 笔记本过来,叫我帮他在 Mac上安装 Caffe.穷屌丝以前没有玩过 Mac 笔记本,冲着对 Mac 的这份好奇,开始痛

Mac OS X 10.12.5下Anaconda中JupyterNotebook出现"不理解“open location”信息。 (-1708)"错误的解决方法

在更新Mac OS X 10.12.5后,发现当通过Anaconda打开JupyterNotebook时出现了以下错误,而且JupyterNotebook并没有通过浏览器启动 我们退出Anaconda,系统提示是否退出JupyterNotebook,这说明JupyterNotebook已经在8888端口上运行了 我们在浏览器地址栏输入(http://localhost:8888)就可以跳转到JupyterNotebook页面,但此时我们会发现页面要求我们输入密码 但这个密码之前并没有被设置过,尝

Swift之 vm10虚拟机安装Mac OS X10.10教程

VM10装Mac OS X 10.9.3及更新到Mac OS X 10.10,让你的windows也能玩Swift . 近期WWDC放出终极大招--新的编程语言Swift(雨燕),导致一大波程序猿的围观和跃跃欲试. 当然了,工欲善其事,必先利其器,所以对于那些没有Mac又想要尝鲜的小伙伴肯定非常为难.可是,请放心,本文教你怎样在Windows下也能体验Mac的滋味.当然咯,最基本的还是体验新的语言Swift.好了话不多说,直接開始,贴图比較多,耐心等待图的刷出. 基本步骤 2.1. 虚拟机的安装

Mac OS X 10.10安装PyQt流程1.0

装PyQt需要三个包:Qt.SIP.PyQt Qt包在http://www.qt.io/download下载,我下的是5.4.0免费版.(注:目前先不要下最新的Qt 5.5.0,虽然这个版本适配Mac OS X 10.10retina屏,但是目前貌似还没有配上它的PyQt包,我刚开始下的Qt 5.5.0结果因为license的原因装不上) sip包和PyQt都在http://www.riverbankcomputing.com下载,我下的都是最新的开发版,分别是sip4.16.8.PyQt-gp

Mac OS X Yosemite 10.10 配置 Apache+PHP 教程注意事项

首先启动 Apache,在终端里输入命令: sudo apachectl start 查看 Apache 版本: httpd -v 在Yosemite 10.10下,apache更新了 Server version: Apache/2.4.9 (Unix) Server built: Sep 9 2014 14:48:20 接着测试,我就发现如下几点需要修正,如有其它疑问欢迎交流: 1.重新启用PHP,避免脚本直接显示在页面上 首先是 http://localhost/ 会将 PHP 代码直接显