精华内容
下载资源
问答
  • gcc -c test.c //-c 只编译不链接->->目标文件.o gcc –c main.c 得到两个 .o 文件,一个是 main.o,一个是 test.o ,然后我们链接 .o 得到可执行程序: gcc -o main main.o 这时,你会发现,报...
    gcc 
    		-I			指定						比如要包含当前目录下的include,则-Iinclude  【而不是-I/include错误】
    		-lname	(小写l)指定连接的库名------与之对应的库文件名为libname.so   
    		//优先当前位置找,其次去默认位置(如/lib和/usr/lib和/usr/local/lib)找
    		//默认位置的库直接用-l参数就能链接了【这些位置已经包含在默认位置PATH中了】
    		-Ldir		(大写L)指定库路径			比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要指定库路径-L/usr/X11R6/lib(目录) 指定库名-lX11
    		-g			产生调试信息→→然后才能进行gdb调试 gdb filename
    		
    		-c           编译和汇编,但不要链接。 	->生成目标文件a.o
    		-o <file>    用于指定输出文件名			->可执行文件a   原材料为:源文件.c 或者 目标文件.o
    
    		-w的意思是关闭编译时的警告,也就是编译后不显示任何warning
    		-Wall选项意思是编译后显示所有警告。
    		-W选项类似-Wall,会显示警告,但是只显示编译器认为会出现错误的警告。
    

    4种PATH修改方式:

    	echo $PATH //查看当前PATH的配置路径
    a.直接修改$PATH值:
    	export PATH=$PATH:/xxx/xxx //将需配置路径加入$PATH  等号两边一定不能有空格
    	//配置完后可以通过第一句命令查看配置结果。
    	生效方法:立即生效
    	有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置
    	用户局限:仅对当前用户
    	
    b.通过修改.bashrc文件:(.bashrc文件在根目录下)
    	vi .bashrc  //编辑.bashrc文件
    	//在最后一行添上:
    	export PATH=$PATH:/xxx/xxx  ///xxx/xxx位需要加入的环境变量地址 等号两边没空格
    	生效方法:(有以下两种)
    	..关闭当前终端窗口,重新打开一个新终端窗口就能生效
    	..输入“source .bashrc”命令,立即生效
    	有效期限:永久有效
    	用户局限:仅对当前用户
    	
    c.通过修改profile文件:(profile文件在/etc目录下)
    	vi /etc/profile //编辑profile文件
    	//在最后一行添上:
    	export PATH=$PATH:/xxx/xxx
    	生效方法:系统重启
    	有效期限:永久有效
    	用户局限:对所有用户
    	
    d.通过修改environment文件:(environment文件在/etc目录下)
    	vi /etc/profile //编辑profile文件
    	在PATH=/·········中加入“:/xxx/xxx”
    	生效方法:系统重启
    	有效期限:永久有效
    	用户局限:对所有用户
    

    gcc可能遇到的问题:undefined reference to

    1、链接缺失目标文件(.o)/编译时少了源文件

    在这里插入图片描述

    编译:
    gcc -c test.c  //-c 只编译不链接->->目标文件.o
    gcc –c main.c
        得到两个 .o 文件,一个是 main.o,一个是 test.o ,然后我们链接 .o 得到可执行程序:
    
    1、仅使用部分目标文件main.o
    gcc -o main main.o		
        这时,你会发现,报错了:
    	main.o: In function `main':
    	main.c:(.text+0x7): undefined reference to `test'
    	collect2: ld returned 1 exit status
        这就是最典型的undefined reference错误,因为在链接时发现找不到某个函数的实现文件,本例中test.o文件中包含了test()函数的实现,所以如果按下面这种方式链接就没事了。
    
    2、使用全部的目标文件
    gcc -o main main.o test.o
       //为了让大家更加清楚底层原因,我把编译链接分开了,下面这样编译也会报undefined reference错,其实底层原因与上面是一样的。
    
    3、仅使用部分源文件(类似情况一)
    gcc -o main main.c //同样是缺少test的实现文件test.o
    	
    4、使用全部源文件
    gcc -o main main.c test.c //ok,没问题了
    	两个实现文件一起编译则行
    

    2、链接时缺少相关的库文件(.a/.so)

    在此,只举个静态库的例子,假设源码如下。
    在这里插入图片描述

    先把test.c编译成静态库(.a)文件
    gcc -c test.c  					->test.o			编译得到目标文件
    ar -rc test.a test.o			->test.a			由目标文件(.o)编译得到静态库(.a)
        至此,我们得到了test.a文件。我们开始编译main.c
    
    gcc -c main.c					->main.o
        这时,则生成了main.o文件,然后我们再通过如下命令进行链接希望得到可执行程序。
    
    1、gcc -o main main.o
        你会发现,编译器报错了:
    	/tmp/ccCPA13l.o: In function `main':
    	main.c:(.text+0x7): undefined reference to `test'
    	collect2: ld returned 1 exit status
        其根本原因也是找不到test()函数的实现文件,由于该test()函数的实现在test.a这个静态库中的,故在链接的时候需要在其后加入test.a这个库,链接命令修改为如下形式即可。
    
    2、gcc -o main main.o ./test.a 
         【扩展】:同样,为了把问题说清楚,上面我们把代码的编译链接分开了,如果希望一次性生成可执行程序,则可以对main.c和test.a执行如下命令。
         
    不拆分,一次完成的方式:
    gcc -o main main.c ./test.a //同样,如果不加test.a也会报错
    //相当于gcc -c main.c	+	gcc -o main main.o ./test.a
    

    3、链接的库文件中又使用了另一个库文件

    在这里插入图片描述
    从上图可以看出,main.c调用了test.c的函数,test.c中又调用了fun.c的函数。
    首先,我们先对fun.c,test.c,main.c进行编译,生成 .o文件。

    gcc -c func.c		->fun.0		目标文件(实现文件)
    gcc -c test.c		->test.0	目标文件(实现文件)
    gcc -c main.c		->main.0	目标文件(实现文件)
    
    ar –rc func.a func.o	->fun.a		打包成静态库文件.a
    ar –rc test.a test.o	->test.a	打包成静态库文件.a
        
    gcc -o main main.o test.a	//由于main.c中包含了对test()的调用,因此,应该在链接时将test.a作为我们的库文件
        这时,编译器仍然会报错,如下:
    	test.a(test.o): In function `test':
    	test.c:(.text+0x13): undefined reference to `func'
    	collect2: ld returned 1 exit status
        就是说,链接的时候,发现我们的test.a调用了func()函数,找不到对应的实现。由此我们发现,原来我们还需要将test.a所引用到的库文件也加进来才能成功链接,因此命令如下。
    
    gcc -o main main.o test.a func.a
        ok,这样就可以成功得到最终的程序了。同样,如果我们的库或者程序中引用了第三方库(如pthread.a)则同样在链接的时候需要给出第三方库的路径和库文件,否则就会得到undefined reference的错误。
    

    4、多个库文件链接顺序问题

        这种问题也非常的隐蔽,不仔细研究你可能会感到非常地莫名其妙。我们依然回到第3小节所讨论的问题中,在最后,如果我们把链接的库的顺序换一下,看看会发生什么结果?
    
    gcc -o main main.o func.a test.a
        我们会得到如下报错.
    	test.a(test.o): In function `test':
    	test.c:(.text+0x13): undefined reference to `func'
    	collect2: ld returned 1 exit status
        因此,我们需要注意,在链接命令中给出所依赖的库时,需要注意库之间的依赖顺序,依赖其他库的库一定要放到被依赖库的前面,这样才能真正避免undefined reference的错误,完成编译链接。
    

    5、在c++代码中链接c语言的库

    如果你的库文件由c代码生成的,则在c++代码中链接库中的函数时,也会碰到undefined reference的问题。下面举例说明。

    首先,编写c语言版库文件:
    加粗样式

     编译,打包为静态库:test.a
    
    gcc -c test.c
    ar -rc test.a test.o
        至此,我们得到了test.a文件。下面我们开始编写c++文件main.cpp
    

    在这里插入图片描述

     然后编译main.cpp生成可执行程序:
    
    g++ -o main main.cpp test.a
        会发现报错:
    
    /tmp/ccJjiCoS.o: In function `main':
    main.cpp:(.text+0x7): undefined reference to `test()'
    collect2: ld returned 1 exit status
        原因就是main.cpp为c++代码,调用了c语言库的函数,因此链接的时候找不到,解决方法:即在main.cpp中,把与c语言库test.a相关的头文件包含添加一个extern "C"的声明即可。例如,修改后的main.cpp如下:
    

    在这里插入图片描述
    g++ -o main main.cpp test.a
    再编译会发现,问题已经成功解决。

    展开全文
  • 1、参考ubuntu下交叉编译环境构建,安装arm-linux-gcc后,配置了export PATH,但是执行命令后显示 commond not found。...export PATH=$PATH:/usr/local/arm/2.95.3/bin 时,记得修改自己电脑对应的路

    1、参考ubuntu下交叉编译环境构建安装arm-linux-gcc后,配置了export PATH,但是执行命令后显示 commond not found。

    2、解决办法提示错误:arm-linux-gcc: Command not found

    3、注意照搬 export PATH=$PATH:/usr/local/arm/2.95.3/bin  时,记得修改自己电脑对应的路径,如我的是export PATH=$PATH:/usr/local/arm/3.4.1/bin,别一激动直接copy了。

    展开全文
  • 在/etc/profile中 if [ "`id -u`" -eq 0 ];...PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/arm/4.2.2-eabi/usr/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/games

    在/etc/profile中

    if [ "`id -u`" -eq 0 ]; then
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/arm/4.2.2-eabi/usr/bin"
    else
    PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
    fi


    然后

    sudo -s

    source /etc/profile

    arm-linux-gcc -v

    展开全文
  • ubuntu下如何修改(安装)arm-linux-gcc编译器 将gcc解压到根目录 sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C / 查看原来的环境变量 echo $PATH   得到: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/...

    ubuntu下如何修改(安装)arm-linux-gcc编译器

    • 将gcc解压到根目录
    sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /
    • 查看原来的环境变量
    echo $PATH

     

    • 得到:
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin
    • 修改新的环境变量:(仅本次登陆用新的gcc)
    export PATH=/usr/local/arm/4.3.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

    注:/work/tools/gcc-3.4.5-glibc-2.3.6/bin 是gcc-3.4.5-glibc-2.3.6版的目录
    /usr/local/arm/4.3.2/bin是arm-linux-gcc-4.3.2版的目录

    • 永久修改gcc:
    vi /etc/environment 
    • 原来:
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin"
    • 改为:
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin"

    重启即可

    后面还需要移植库
    库在 usr/local/arm/4.3.2/
    下面的一个文件中
    ***************************************
    安装完成后,出现了以下错误

    root@ubuntu:/# arm-linux-gcc -v
    /usr/local/arm/4.3.2/bin/arm-linux-gcc: line 3: /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc: No such file or directory

    在我的系统里面,通过查找网上资料,判断是因为我的Ubuntu版本是64位的,需要安装32位的库

    sudo  apt-get install ia32-libs
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Package ia32-libs is not available, but is referred to by another package.
    This may mean that the package is missing, has been obsoleted, or
    is only available from another source
    However the following packages replace it:
      lib32ncurses5 lib32z1

    可是,按照网上的说法安装,还是有问题,仔细阅读安装信息,发现是那个库过时了,那我们就用信息提供的库

    sudo apt-get install lib32ncurses5
    sudo apt-get install lib32z1

    转载于:https://www.cnblogs.com/Hello-words/p/6207725.html

    展开全文
  • arm-linux-gcc安装

    2021-02-24 14:53:29
    arm-linux-gcc安装 1sudo su进入root权限 2解压sudo tar –xjvf arm-linux-...export PATH=$PATH:/home/xxx/work/gcc-3.4.5-glibc-2.3.6/arm/bin 4 source /etc/profile 5 arm-linux-gcc –v 未成功可重启 ...
  • 修改/etc/profile sudo vi /etc/profile 最后一行增加 export LIBRARY_PATH=$LIBRARY_PATH:XXXXX 立即生效文件 source /etc/profile LIBRARY_PATH含义 LIBRARY_PATH是程序编译期间查找动态链接库时指定查找动态库...
  • 安装pwntools 的时候,系统提示说缺少openssl,那就装呗,去官网下了之后,解压安装,都很顺利,但是,继续安装pwntools时候,仍然...或者修改gcc寻找路径,手动略繁琐 #添加.so搜索路径 export LD_LIBRARY_PATH=$LD_
  • CMake时说找不到gcc g++,大概率是因为你的操作系统不是64位的;虽然CPU架构是64位的,但是还是要看具体安装的操作系统的位数。 解决方案: ①修改run.sh脚本,将默认的armv8改成armv7hf或者armv7(不知道改成哪...
  •  步骤:修改/etc/profile或者/etc/environment中PATH变量,总之就是将arm-linux-gcc路径添加进PATH变量,记得用export  现象:输入arm-linux-gcc命令提示输出arm-linux-gcc找不到  总结:由于路径比较长,在...
  • arm-linux-gcc 安装

    2014-03-11 14:44:21
    在Fedora14环境下安装arm-linux-gcc后,需要修改 vi /root/.bashrc的最后一行,添加export PATH=$PATH:/绝对路径/bin,然后注销登陆,重新登陆后既可以使用arm-linux-gcc -v来查看你所安装的交叉编译器的版本,就...
  • arm-linux-gcc 4.3.2

    2018-08-30 11:46:50
    从文件arm-linux-gcc-4.3.2中找到arm文件,复制到根目录下的这个/usr/local位置下 修改/etc/profile文件:  # vim /etc/profile  增加路径设置,在末尾添加如下,保存/etc/profile文件:  export PATH=$PATH:/...
  • arm-linux-gcc 4.4.3 安装

    2016-04-19 16:21:08
    一, 下载arm-linux-gcc 4.4.3 1 tar -zxvf arm-linux-gcc-4.4.3.tar.gz 解压 2 把解压出来的arm/4.4.3复制...3 修改环境配置 打开vi /etc/profile 在末尾添加 export PATH=$PATH:/usr/local/arm/4.4.3/bin 保存退出
  • 安装arm-linux-gcc

    2017-06-17 17:19:03
    1.解压 tar jxvf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 2.文件cp到/usr/local/下,cp -r gcc-3.4.5-glibc...3.修改环境变量,把交叉编译工具加入到PATH中去  cd ; vi .bash_profile 然后在最后加fi
  • 1: 下载 arm-linux-gcc-4.3.2.tar 2:放在LINUX服务器上面解压到根...3: echo $PATH可以看到当前的arm-linux-gcc的版本号(环境变量) 4: cd /usr/local/arm/4.3.2/bin 5: 如果只是当时用的话,修改的方法如下
  • Install arm-linux-gcc

    2009-06-28 22:09:00
    先將 arm-linux-gcc-3.4.1 解壓縮至 /etc/local 中 1 $sudotarzxvfarm-linux-gcc-3.4.1.tgz修改 /etc/profile 檔案1$sudogedit/etc/pro在最後一行加入1PATH=$PATH:/usr/local/arm/3.4.1/bin並更新目前視窗的 Include...
  • 64位CentOS系统安装arm-linux-gcc 4.4.3

    千次阅读 2016-03-06 21:05:13
    下载 arm-linux-gcc 4.4.3 下载链接http://download.csdn.net/detail/zlyong0018/4646377#comment...#tar zxvf arm-linux-gcc 4.4.3 -C /修改环境变量 #vim ~/.bashrc 在尾部加入一行 export PATH=$PATH:/usr/loc
  • 1.从芯片供应商中的SDK中复制交叉编译工具链源码到一个Linux目录。 2.解压文件到根目录/ 添加交叉编译工具链到系统的环境变量中: 方法1: 1. 打开文件~/.bashrc [root@localhost work]# vim ~/.bashrc 2. 在其...
  • 将下载好的arm-linux-gcc压缩包解压到指定的目录: tar xvzf arm-linux-gcc.tar.gz -C /usr/local/arm 修改环境变量: vim ~/.bashrc 在尾部加入一行 export PATH=$PATH:/usr/local/arm/opt/Fr...
  • linux-gcc-4.3.2.tar.bz2 -C /查看原来的环境变量echo $PATH得到:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin修改新的环境变量:(仅本次登.....
  • 安装arm-linux-gcc: tar xvzf arm-linux-gcc-4.5.1-(版本) -C / 解压到根目录。...这样修改可以解决有时已经安装了arm-linux-gcc编译工具链了,可是在编译的时候总是提示:bash: arm-linux-gcc: command not
  • 安装包 arm-linux-gcc-4.4.3.tar 1.解压到共享目录 #tar -zxvf arm-linux-gcc-4.4.3.tar.gz 2.把/opt/FriendlyARM/toolschain拷到/myinstall/ 3.修改环境变量 #vi /etc/profile 按大写G 到最后一行 在...
  • ubuntu下 arm-linux-gcc-4.5.1安装 tar -zxvf arm-linux-gcc-4.5.1.tar.gz -C / 或者tar -zxvf arm-linux-gcc-4.5.1.tar.gz -C / 解压后会在根目录下出现一...修改.bashrc文件内容(最后面添加PATH路径) vi ~/....
  • Arm-linux-gcc 交叉编译器安装使用说明: 1. 解压安装包:#tar xvf arm-linux-gcc-3.4.1.tar.bz2 –C / 2. 进入解压后的文件夹,将以交叉编译器版本号...3. 修改环境变量,把交叉编译器的路径加入到PATH修改~/.ba
  • arm-linux-gcc-4.33 安装

    千次阅读 2012-07-21 22:47:24
    linux OS ubuntu  kernel 2.6.38 ...下载一个arm-linux-gcc-4.3.3.tar.gz的压缩包 ...tar xvzf arm-linux-gcc-4.3.3.tar.gz -C / ...注:组后的-C参数中的C是大写的参数 ...然后就是修改环境PATH sudo gedit /etc
  • 安装arm-linux-gcc-4.4.3

    2016-05-10 19:19:59
    sudo tar zxvf arm-linux-gcc-4.4.3.tar.gz (这里为当前目录下,如果要到指定目录只需加上-C /目录路径/ 2、解压完后,需要修改环境变量 用vim打开文件 sudo vim /etc/profile 在最后一行加上 export PATH=$PATH...
  • 问题:路径设置明明没有问题,arm-linux-gcc -v ,也可以正确显示版本信息(我用的是4.3.3的EABI编译器),但make zImage时总是提示找不到arm-linux-gcc可能性分析:网上资料: 1.应该是在 makefile 中指出你的 gcc ...
  • redhat下arm-linux-gcc安装

    2013-08-08 13:19:43
    1、首先下载arm-linux-gcc.tgz到任意的目录下,然后解压 2、将解压的文件夹copy到/usr/local/下,最终的文件目录是/usr/local/arm/版本号/文件 3、修改环境变量,把交叉编译器的路径加入到PATH。  ...
  • ubuntu下如何更换arm-linux-gcc编译器

    千次阅读 2014-05-26 17:14:12
    sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C / 查看原来的环境变量  echo $PATH 得到: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin 修改...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 214
精华内容 85
关键字:

linuxpath修改gcc

linux 订阅