gcc链接脚本
A. centos7怎么编译安装gcc-c++
方法/步骤
1
yum install glibc-static libstdc++-static -y
安装c和c++的静态库(据说如果系统中缺少libc.a和libstdc++.a编译时会出错,但是我没有那么多闲情逸致去试,实践过的朋友可以回复一下,分享一下经验,让大家都长长见识)
2
下载解压gcc,我的gcc目录是gcc-4.8.0
3
进入gcc目录,执行:
./contrib/download_prerequisites
这个神奇的脚本文件会帮我们下载、配置、安装那三个依赖的库。可以节约我们大量的时间和精力。
4
你以为这三个库自动下载了、自动make install了就没事了吗?错!
很多人在编译gcc的时候出现各种奇奇怪怪的错误就是这步没有做好。
它们还不在.so文件的搜索路径里面,需要加进去,最后切记切记一定要执行一下ldconfig。
大致做法为:
1,找到你的共享库文件被install到哪个目录了(updatedb+locate命令)。
2,如果你的库不是直接放在/lib或/usr/lib下,需要修改/etc/ld.so.conf文件,加入你的共享库的路径
3,如果在2中添加了共享库路径,切记要执行一下ldconfig,更新响应cache文件让系统能找到你的共享库。
5
建立临时目录,这个目录用以存放编译时的大量临时文件,是文档要求中必须的。
我是在gcc-4.8.0下建立了一个名为gcc-build-4.8.0的目录,进入它。
mkdir gcc-build-4.8.0
cd gcc-build-4.8.0
配置gcc编译选项
6
强烈建议阅读INSTALL目录下的说明文档,尤其是configure.html,以确定你的编译选项。
比较基本的选项有--enable-languages,说明你要让你的gcc支持那些语言,--disable-multilib不生成编译为其他平台可执行代码的交叉编译器。--disable-checking生成的编译器在编译过程中不做额外检查,也可以使用--enable-checking=xxx来增加一些检查。
网上还说了什么--with-gmp、--with-mpfr、--with-mpc这三个选项,但是如果你3,4步做好了,就不要配了,反之你还是老实点吧别抱侥幸心理了。
调用gcc-4.8.0目录下的configure文件:
例如:
../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
7
执行
../make #不解释
执行编译命令(#在8核的虚拟机上进行编译,每个核分配2个编译任务)
make -j16
make install编译过程CPU 核基本100%占用,整个编译用时11分50秒。
检查gcc版本
#你就等吧少年,建议晚上睡觉前做
当然上面三步一定要在前一步顺利结束的情况下进行,如果哪一步出错了,结果都显示error了,就不要再做后面的了。在shell的输出里搜索"error"看具体的出错点是什么,、google一下为什么。
如果你求稳的话,可以在make install之前先make check一下。
B. 鍦↙INUX绯荤粺涓缂栫▼搴忥纴makefile鏄镐庝箞鐢熸垚镄勶纴鏄阃氲繃GCC鎴朑DB缂栬疟镵旀帴鐢熸垚镄勫悧锛燂纻锛燂纻
杩欎綅链嫔弸鎴戠湅鏄链夌偣璇瑙d简makefile镄勫仛鐢ㄣ俶akefile 鏄涓涓鑴氭湰锛岀敱浠栨潵鎺у埗缂栬疟鍑虹殑绋嫔簭镄勭増链銆傚綋浣犳敼鍐欎简铡熸枃浠跺悗锛岄氲繃makefile 𨱒ユ镆ヤ緷璧栧叧绯伙纴𨱒ョ敓鎴愭渶缁堢殑鏂囦欢銆傛瘆濡备竴涓绋嫔簭鍙玜 浠栫殑婧愮爜鍙玜.c
a.c 鍙堢敤鍒板ご鏂囦欢a.h 锛宎.h鏄1.h鍜2.h鐢熸垚镄
濡傛灉浣犳敼鍐欎简1.h锛岄氲繃缂栧啓makefile鏂囦欢銆俶ake镞朵细璋幂敤makefile𨱒ヤ緷姝ゆ寜渚濊禆鍏崇郴鐢熸垚链钖庣殑a
镓浠ヨ寸紪璇戞椂绋嫔簭骞朵笉鐭ラ亾鐢熸垚a閮界敤鍒颁粈涔堛傛庝箞鍙鑳借嚜宸辩敓鎴愬憿銆
makefile鏄瑕佷綘镊宸辩紪鍐欑殑锛屾潵锻婅瘔make𨱒ュ备綍缂栬疟銆俶ake宸ュ叿灏辩浉褰扑簬涓涓鑴氭湰銆
C. 濡备綍鍦 Mac OS X 涓嬬法璀锛屽畨瑁 gcc
涓銆丮ac OS X涓璵ake鍜実cc锻戒护镄勫畨瑁
鍦ㄧ紪璇慙ua鍓嶉渶瑕佸仛镄勫嗳澶囧伐浣溿
鎴戝皢lua-5.2.2.tar.gz涓嬭浇鍒拌娴鏋灭数鑴戜腑锛岃В铡嫔悗杩涜岀紪璇戞椂锛屽彂鐜版垜镄凪ac OS X 娌℃湁mak锻戒护锛屼篃娌℃湁gcc锻戒护銆
妫娴嬭娴鏋灭数鑴戠殑Mac OS X涓鏄钖︽湁make锻戒护镄勬柟娉曪纴鍙鍦ㄦ带鍒跺彴阌鍏ュ懡浠わ细which make
濡傛灉链夎ュ懡浠わ纴鍒欎细杩斿洖鎻愮ず锛/usr/bin/make
镓浠ユ垜闇瑕佸湪Mac OS X涓瀹夎卪ak锻戒护鍜実cc浣垮懡浠ゃ傚畨瑁呭伐鍏峰寘闇瑕佷粠鑻规灉镄勫紑鍙戠绣绔欎笅杞姐
涓嬭浇鏂规硶锛
镓揿紑Xcode锛岃彍鍗昘code --> Open Developer Tool -->More Developer Tools
杩欐椂Safari娴忚埚櫒琚杩愯岋纴骞跺脊鍑烘敞鍐屽硅瘽妗嗭纴瑕佹眰杈揿叆Apple ID鍜屽瘑镰侊纴濉鍐椤畬娉ㄥ唽淇℃伅铹跺悗杩涘叆Apple Developer镄勪笅杞界珯镣癸纴鎼灭储钬淯nix钬濓纴缁撴灉浼氩垪鍑哄懡浠ゅ伐鍏峰寘镄勪笅杞藉垪琛锛
Command Line Tools 锛圤S X Mountain Lion锛塮or Xcode - April 2013 锛堣繖涓鐗堟湰闇瑕乆code 4.6.2 鍜 Mac OS X 10.8浠ヤ笂鐗堟湰锛
Command Line Tools 锛圤S X Lion锛塮or Xcode - April 2013 锛堣繖涓鐗堟湰闇瑕乆code 4.6.2 鍜 Mac OS X 10.7.4浠ヤ笂鐗堟湰锛
钬︹
涓嬮溃杩樻湁鍏跺畠鐗堟湰锛岃窡鎹浣犱娇鐢ㄧ殑Mac OS X镄勭増𨱒ヤ笅杞姐傚彟澶栬翠竴涓嬶细
Mac OS X 10.4.x锛屼唬鍙蜂负锛歀ion
Mac OS X 10.8.x锛屼唬鍙蜂负锛歁ountain Lion
鎴戠殑Mac OS X鏄疢ountain Lion锛屾墍浠ヤ笅杞界殑鏄疌ommand Line Tools 锛圤S X Mountain Lion锛塮or Xcode - April 2013 鐗堟湰锛屾枃浠跺悕涓猴细
xcode462_cltools_10_86938259a.dmg
涓嬭浇瀹屽悗鍙屽嚮璇ユ枃浠躲傝繃涓浼氩効钖庯纴浼氩脊鍑哄畨瑁呭寘镄勭獥鍙o纴瀵瑰弻鍑诲畨瑁呭寘杞杩呫傛寜鎻愮ず瀹屾垚瀹夎呫傝繖镞秏ake鍜実cc渚挎湁浜嗐
鍙浣跨敤which锻戒护杩涜屾镆ャ
浜屻佺紪璇慙ua杞浠
缂栬疟鍜屽畨瑁呯楁愭粦鏂规硶镄勮︾粏璇存槑鍦╮eadme鏂囦欢涓锛歭ua-5.2.2/doc/readme.html
鍦ㄧ紪璇戝墠链濂借繘琛岀紪璇戞祴璇曪纴鍦╨ua-5.2.2鐩褰曚笅锛屼娇鐢ㄥ懡浠ゅ备笅锛歮ake test
鎴戠殑缂栬疟鍜屽畨瑁呮柟娉曟槸锛
sudo make macosx install 锛坰udo鍦∕ac OS X涓琛ㄧず浣跨敤瓒呯骇鐢ㄦ埛𨱒冮檺锛
娉ㄦ剰锛
Lua镄勭紪璇戝拰瀹夎呰存槑鏂囨。锛坮eadme.html锛変腑鎸囧嚭锛岀紪璇慙ua镞讹纴闇瑕侀夋嫨瑕佽繍琛岀殑镎崭綔绯荤粺锛岀紪璇戝苟瀹夎呯殑镙煎纺濡备笅锛
make xxx install 锛埚傛灉涓嶆槸瓒呯骇鐢ㄦ埛锏诲綍锛屽垯闇瑕佸墠闱㈠姞sudo锻戒护锛
鍏朵腑xxx琛ㄧず鐩镙囨搷浣灭郴缁熺殑镙囱帮纴鐩镙囨搷浣灭郴缁熺殑镙囱板垪琛ㄥ备笅锛
aix ansi bsd freebsd generic linux macosx mingw posix solaris
Lua 灏嗛粯璁ゅ畨瑁呭埌 /usr/local/锛屽畨瑁呭畬鎴愬悗锛屽湪璇ョ洰褰曚笅浼氱敓鎴愪竴浜涢吨瑕佹枃浠躲
/usr/local/ bin: 锛埚彲杩愯岀▼搴忥级
lua luac 锛坙ua鏄疞ua璇瑷镄勮В閲婂櫒锛宭uacLua璇瑷镄勭紪璇戝櫒锛
/usr/local/ include: 锛埚ご鏂囦欢锛
lua.h luaconf.h lualib.h lauxlib.h lua.hpp
/usr/local/lib: 锛埚簱鏂囦欢锛
liblua.a
/usr/local/ man/man1: 锛埚懡浠ゆ坠鍐岋级
lua.1 luac.1
Lua 瑙i喷鍣ㄥ畬鏁寸殑璺寰勬槸 /usr/local/bin/lua锛屽湪缁堢涓杩愯 lua 鍗冲彲璋幂敤瑙i喷鍣ㄣ
涓夈丩ua璇瑷瑙i喷鍣ㄧ殑娴嬭瘯
鍦ㄦ带鍒跺彴涓婅緭鐚滆厞鍏lua锻戒护锛歭ua
Lua 5.2.1 Copyright 锛圕锛 1994-2012 Lua.org, PUC-Rio
> print 锛堚淗ello World!钬濓级 锛堣繘鍏ヤ氦浜掑懡浠ょ姸镐侊纴鍦ㄦ彁绀虹︹>钬濅笅杈揿叆娴嬭瘯浠g爜锛
Hello World! 锛堣繑锲炵殑缁撴灉锛
阌鍏 Control+D 阃鍑轰氦浜掑懡浠
濡傛灉𨱍宠繍琛屼竴涓猯ua鑴氭湰鏂囦欢锛屽彲浠ヤ娇鐢ㄤ笅闱㈠懡锛歭ua 鏂囦欢钖
濡傦细lua hello.lua
hello.lua鏂囦欢镄勪唬镰侊细
io.write锛堚淗ello world, from 钬,_VERSION,钬溾!\n锛
缁撴灉锛欻ello world, from Lua 5.2!
娉ㄩ喷锛
Lua 鏄涓涓灏忓阀镄勮剼链璇瑷銆 鏄宸磋タ閲岀害鐑鍐呭崲澶╀富鏁椤ぇ瀛︼纸Pontifical Catholic University of Rio de Janeiro锛夐噷镄勪竴涓镰旂┒灏忕粍锛岀敱Roberto Ierusalimschy銆乄aldemar Celes 鍜 Luiz Henrique de Figueiredo镓缁勬垚骞朵簬1993骞村紑鍙戙 鍏惰捐$洰镄勬槸涓轰简宓屽叆搴旂敤绋嫔簭涓锛屼粠钥屼负搴旂敤绋嫔簭鎻愪緵𨱔垫椿镄勬墿灞曞拰瀹氩埗锷熻兘銆
寰埚氩簲鐢ㄧ▼搴忎娇鐢↙UA浣滀负镊宸辩殑宓屽叆寮忚剼链璇瑷锛屼互姝ゆ潵瀹炵幇鍙閰岖疆镐с佸彲镓╁𪾢镐с傝繖鍏朵腑鍖呮嫭榄斿吔涓栫晫銆佸崥寰蜂箣闂ㄣ佹劋镐掔殑灏忛笩绛夈
D. .text .global 这是什么意思arm linux 汇编
.text
.global
是arm-gcc编译器的关键词。
.text
指定了后续编译出来的内容放在代码段【可执行】;
.global
告诉编译器后续跟的是一个全局可见的名字【可能是变量,也可以是函数名】;
在本例中,_start是一个函数的起始地址,也是编译、链接后程序的起始地址。由于程序是通过加载器来加载的,必须要找到
_start名字的函数,因此_start必须定义成全局的,以便存在于编译后的全局符合表中,供其它程序【如加载器】寻找到。
E. gcc中链接脚本lds如何使用
有两种使用方汪改法:困空判
1,lds作为外置脚本,参与对gcc链接过程的控制。使用方法为
gcc XXX.c XX.lds。
gcc能够自动识别你的文件列中后缀不能识别的文件,作为链接脚本使用。这样编译出来的程序,还是要使用gcc默认亏渣的lds脚本,你的脚本只是一个辅助。
2,lds代替系统的脚本。
这种要先使用gcc -c参数编译你的源程序,编译出来的.o文件,使用命令ld -T来指定lds文件链接到一起。