openwrt 版本: 15.05(CC)
最近在openwrt里面想编写一个串口的读写程序,没想到会出现以下问题
1、编译的时候
以下为网友遇到的问题
Package helloworld is missing dependencies for the following libraries: libc.so.6 libpthread.so.0
缺少类库,然后其实我发现我的类库在系统里是存在的:
locate libc.so.6
结果:
/lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/ libpthread.so.0
/lib64/libc.so.6
但是我的应用程序用到了 Libpthread,所以提示 少了2个依赖库。
按照网友的做法
第一步:
把/lib/i386-linux-gnu/libc.so.6 libpthread.so.0这2个文件拷贝到家目录下的openwrt/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib这里。
cp /lib/i386-linux-gnu/libc.so.6 ~/openwrt/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib
cp /lib/i386-linux-gnu/libpthread.so.0 ~/openwrt/staging_dir/target-mips_34kc_uClibc-0.9.33.2/usr/lib
第二步:
在你写的代码文件夹下(我写的是个my_ipk)下的Makefile里
这里我并没有照着网友的做,因为我加了之后,拷贝到板子上opkg都装不上,如下所示:
增加:这一步我跳过
DEPENDS:=+libc +libpthread
就是在:
define Package/my_ipk
SECTION:=utils
CATEGORY:=Utilities
TITLE:=My_ipk-- prints a snarky message
DEPENDS:=+libc
endef
这个define下面。
第三步:也是在Makefile里增加:
define Package/my_ipk/install
$(INSTALL_DIR) $(1)/bin
$(CP) /lib/i386-linux-gnu/libc.so.6 $(1)/bin
$(CP) /lib/i386-linux-gnu/libpthread.so.0 $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/my_ipk $(1)/bin/
endef
这里多了一行$(CP)的代码。
最后一步:
这一步我跳过
在/home/user/attitude/staging_dir/target-mips_r2_uClibc-0.9.33.2/pkginfo下的libc.provides文件里增加两行:
/lib/i386-linux-gnu/libc.so.6
libc.so.6
我只做了第一步和第三步,编译完后scp ./bin/ar71xx/packages/base/my_ipk_1_ar71xx.ipk [email protected]: 拷贝到开发板,如果你的网络有问题,上篇文档里有说明,如果把此文件编进文件系统里,比较麻烦一点。
在开发板中输入 opkg install my_ipk_1_ar71xx.ipk 提示如下:
执行程序的时候出现的错误。缺少libthread.so.0这个库,这个库可不能随便从虚拟机里拷贝一个过来,放到/lib下,因为格式肯定不对,那我们就看看openwrt里有没有这个库,进入openwrt根目录,mk,mk就是make menuconfig啦,嫌太长,就自己alias啦。
搜索一下,发现一个可疑对象如下所示:
好,位置显示在Base system下,我们进入该选项找到
<*> libpthread.......................................... POSIX thread library
选中之后推出保存,make V=99编译openwrt。
之后会在bin/ar71xx/packages/base/libpthread_0.9.33.2-1_ar71xx.ipk 出现。scp bin/ar71xx/packages/base/libpthread_0.9.33.2-1_ar71xx.ipk
[email protected]:
执行以下操作
程序成功运行了。
本人也是刚刚接触openwrt,如有不对的地方,请多多指教。。。