在openwrt上安裝gcc並編譯運行c/c++程序

分類:IT技術 時間:2017-08-12

   1. 安裝gcc   

直接安裝gcc是不行的,因為gcc很大(具體有多大,我也不知道,反正25MB是hold不住的,會提示空間不足,然後進入openwrt, 登陸192.168.1.1,依次進入system->Sotfware就可以看到有多少剩余空間)

    那麽問題來了,該怎麽辦。

    還好,可以選擇將gcc安裝在外接的u盤中( 其中/mnt/sda4是U盤的掛載地址)。

$ mkdir /mnt/sda4/packages/
$ echo dest usb /mnt/sda4/packages/ >> /etc/opkg.conf

, 然後在將軟件安裝到u盤的時候需要加上 --dest usb.

    eg: opkg install xxx --dest usb   

然後就可以在U盤上安裝gcc了。

$ opkg intall gcc --dest usb

    請耐心等待。。

    安裝完之後,創建一個軟鏈接(也可以直接復制)

$ copy /mnt/sda4/packages/usr/bin/gcc /usr/bin/gcc

    再輸入gcc後,會出現

root@OpenWrt:~# gcc
gcc: can't load library 'libstdc++.so.6'

    說明缺少庫函數。去哪裏找呢?

輸入opkg可以看到openwrt版本:

root@OpenWrt:~# opkg update
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/base/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_base.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/base/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/luci/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_luci.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/luci/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/packages/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_packages.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/packages/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/routing/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_routing.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/routing/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/telephony/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_telephony.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/telephony/Packages.sig.
Signature check passed.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/management/Packages.gz.
Updated list of available packages in /var/opkg-lists/chaos_calmer_management.
Downloading http://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/management/Packages.sig.
Signature check passed.
root@OpenWrt:~#

就可以獲知要下載libstdc++.so.6的地址了,如上圖所示,可以得到如下地址

    https://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/base/

然後找到libstdcpp_4.8-linaro-1_mvebu.ipk,下載下來,然後安裝即可,命令還是

$ opkg install libstdcpp_4.8-linaro-1_mvebu.ipk

(其實也可以選擇遠程安裝:opkg install https://downloads.openwrt.org/chaos_calmer/15.05.1/mvebu/generic/packages/base/libstdcpp_4.8-linaro-1_mvebu.ipk, 不過我已經失敗了。)。安裝的時候一定要註意版本,否則會因為自帶的文件校驗不符而出錯,導致安裝失敗。

    然後,就可以輸入gcc, 來進行測試啦

            

   至此gcc安裝完畢。

   2. 編譯運行c

    隨便整個簡單的c程序進去試試,看看效果

root@OpenWrt:~# gcc -o hello hello.c
gcc: error trying to exec 'cc1': execvp: No such file or directory

 又愉快的出錯了o(╥﹏╥)o。在stackoverflow上找打了答案,也就是cc1的問題。

    先找到cc1的位置:/mnt/sda4/packages/usr/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3/cc1, (查找命令:find / -name cc1), 然後將其復制到/usr/bin/下面。

cp /mnt/sda4/packages/usr/lib/gcc/arm-openwrt-linux-uclibcgnueabi/4.8.3/cc1 /usr/bin/cc1

,再來運行。

    不出意料,又出錯了。o(╥﹏╥)o

root@OpenWrt:~# gcc -o hello hello.c
cc1: error: no include path in which to search for stdc-predef.h
hello.c:1:19: error: no include path in which to search for stdio.h
 #include <stdio.h>
                   ^
hello.c: In function 'main':
hello.c:7:2: warning: incompatible implicit declaration of built-in function 'printf' [enabled by default]
  printf("a=%d\nb=%d\n",a,b);
  ^
root@OpenWrt:~#

還是簡單的帖一下這個C的代碼(還是蠻中規中矩的)。

#include <stdio.h>
void main()
{
	int a=5,b=10;
	int tmp;
	tmp=a;a=b;b=tmp;
	printf("a=%d\nb=%d\n",a,b);
}

暫時還沒解決,等解決了再繼續寫吧。。


Tags: packages 安裝 gcc openwrt 可以 chaos_calmer

文章來源:


ads
ads

相關文章
ads

相關文章

ad