not defined in file libstdc++.so.6 withlink time reference
2018-01-25 16:43
113 查看
转载地址:http://blog.sina.com.cn/s/blog_bd6f4c120101mfyw.html
上一篇以及成功搭建了环境:http://blog.sina.com.cn/s/blog_bd6f4c120101mdm8.html
现在准备把自己写的界面程序移植到开发板运行.
利用qtcreator编写界面程序,这简单描述一下,参照上面文章:
cd qt-4.6.3-x11
sourc qt_x11_setenv.sh
打开qtcreator,建立一个工程假设为form,完成后可以在虚拟机看下做的界面.
进入刚才建立的工程目录,
qmake -project
qmake
make
./form
就可以看到界面了
----------------------------------------------------------------------------------------------------
接下去是移植到开发板.
1. 把刚才做的界面源码复制到qt-4.6.3-arm
cd opt/qt-4.6.3-arm
source qt_arm_setenv.sh //因为要用到arm版的qmake,环境变量要重新设置
qmake -project
qmake
make
./form
此时会提示错误打不开,是正常的,这是在arm板上运行的
2. 启动开发板,在根目录下建立tq2440和tslib2个文件夹
//这里貌似QTDIR的路径要与电脑上一致,不然移植字体不识别,就是要把fedora10系统的 usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib复制到ARM的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib
mkdir tq2440
mkdr tslib
把fedora10 系统里的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib整个lb文件夹拷到开发板/tq2440下
把tslib1.4.tar.gz安装生成的tslib文件夹内容拷到开发板上/tslib
//tslib1.4的安装这里不赘述了,网上找个都没什么问题
现在,我们可以在开发板根目录看到tq2440和tslib这2个文件夹.
tq2440下有lib文件夹,tslib文件夹下有bin include etc lib 4个文件夹.
网上拷贝这些文件多是搭建nfs服务器做的,我是在虚拟机直接把这些文件夹打包(tar zcvf xx.tar.gzxx),共享传给我我的主机,然后主机通过secureCRT下载到开发板,就免去了搭nfs.
3. 在开发板的 /etc/profile中追加:
exportQTDIR=/tq2440
export T_ROOT=/tslib
export PATH=$QTDIR/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
exportTSLIB_TSDEVICE=/dev/event0
exportTSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
exportQWS_MOUSE_PROTO=tslib:/dev/event0
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
这里需要注意3句代码:
exportTSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
exportQWS_MOUSE_PROTO=tslib:/dev/event0
有的开发板fb0event0是在/dev/input/目录下的
所以要改为
exportTSLIB_FBDEVICE=/dev/input/fb0
export TSLIB_TSDEVICE=/dev/input/event0
exportQWS_MOUSE_PROTO=tslib:/dev/input/event0
再执行一下:source /etc/profile使系统更新一遍刚设置的系统环境变量.
验证变量设置是否成功,在开发板终端下执行
echo $QTDIR
如果显示/tq2440,则说明设置成功了
4 接下来我们还得设置一下触摸屏的配置文件ts.conf.
它在哪里呢?前面我们已经拷到开发板/tslib/下,那么tslib一共就有bin etc include lib4个目录,而ts.conf就在etc目录下,开发板下用
vi /tslib/etc/ts.conf
把# module_raw input
前面的“#”号去掉,然后把该行移至行首
现在差不多移植完成了,可以把自己用qtcreator写的程序下载到板子运行.
我是在板子目录下新建mkdir test文件夹
上文已经说到已经把qtcreator做的界面编译成arm版的了,现在把这个可执行文件form下载到开发板/test目录下
在开发板执行:
cd /test
chmod a+x form //提示权限错误就加这句,没有提示加不加无所谓
./form -qws
会出现“relocation error:/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbolpowf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 withlink time reference”错误
我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件(通过右键属性——〉基本,可以看到链接的文件)libstdc++.so.6.0.8,重命名为libstdc++.so.6复制下载到开发板/tq2440/lib/目录下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。
*重命名其实是比较野蛮的方法,可以用ln命令的,参照下面这篇文章……
http://hi.baidu.com/a263238386/blog/item/362f01ce7b11a10a93457eae.html
然后再运行./form –qws,看问题是不是解决了!
现在可以看到开发板界面出现自己qt写的界面了
5.不过触摸屏还没有校准,进入开发板根目录/tslib
cdbin
./ts_calibrate //触摸屏校准程序
运行该程序,屏幕出现5点校准画面,依次点击,将生成触摸屏校准数据文件/etc/pointercal
./ts_test //触摸屏拖曳测试程序
可以用这个来测试校准的怎么样
6.开机自动启动qt 程序
如果想在开机后直接运行自己编的qt程序,而不想出现qt自带的那个界面只需把/etc/init.d/rcS中的
/bin/qtopia & 注释掉,前面加个#号就行:
#/bin/qtopia &
并在下面加上自己的启动程序
/tq2440/run.sh&
//添加一个执行脚本行,这个脚本因为在/etc/init.d/rcS中,所以会被自动运行(注意后面最好有个&,使他在后台执行,否则无法通过串口操作控制台)
修改echo "Starting Qtopia, please waiting..." >/dev/tty1
为echo "Starting myapps, please waiting..." >/dev/tty1
然后在/tq2440/目录下建立一个run.sh文件,内容如下:
#! /bin/sh
export QTDIR=/tq2440
export T_ROOT=/tslib
export PATH=$QTDIR/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
exportTSLIB_TSDEVICE=/dev/event0 //这边可能有的开发板是export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
exportQWS_MOUSE_PROTO=tslib:/dev/event0 //同上,可能在/dev/input/event0
exportLD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
/test/form-qws
重启之后,就可以看见自己添加的qt程序开机自动运行,并且我们可以正常使用触屏。原理就是qt程序依赖很多的动态共享库,在运行的时候必须找到这个共享库,所以在运行qt程序之前必须显式地指明这些共享库的所在位置
最后,还有个问题,显示的界面字体太小,有待下次解决
字体大小设置参照:http://kexieweb.guet.edu.cn/ask/forum.php?mod=viewthread&tid=38
到此,简单的界面就完成了
上一篇以及成功搭建了环境:http://blog.sina.com.cn/s/blog_bd6f4c120101mdm8.html
现在准备把自己写的界面程序移植到开发板运行.
利用qtcreator编写界面程序,这简单描述一下,参照上面文章:
cd qt-4.6.3-x11
sourc qt_x11_setenv.sh
打开qtcreator,建立一个工程假设为form,完成后可以在虚拟机看下做的界面.
进入刚才建立的工程目录,
qmake -project
qmake
make
./form
就可以看到界面了
----------------------------------------------------------------------------------------------------
接下去是移植到开发板.
1. 把刚才做的界面源码复制到qt-4.6.3-arm
cd opt/qt-4.6.3-arm
source qt_arm_setenv.sh //因为要用到arm版的qmake,环境变量要重新设置
qmake -project
qmake
make
./form
此时会提示错误打不开,是正常的,这是在arm板上运行的
2. 启动开发板,在根目录下建立tq2440和tslib2个文件夹
//这里貌似QTDIR的路径要与电脑上一致,不然移植字体不识别,就是要把fedora10系统的 usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib复制到ARM的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib
mkdir tq2440
mkdr tslib
把fedora10 系统里的usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib整个lb文件夹拷到开发板/tq2440下
把tslib1.4.tar.gz安装生成的tslib文件夹内容拷到开发板上/tslib
//tslib1.4的安装这里不赘述了,网上找个都没什么问题
现在,我们可以在开发板根目录看到tq2440和tslib这2个文件夹.
tq2440下有lib文件夹,tslib文件夹下有bin include etc lib 4个文件夹.
网上拷贝这些文件多是搭建nfs服务器做的,我是在虚拟机直接把这些文件夹打包(tar zcvf xx.tar.gzxx),共享传给我我的主机,然后主机通过secureCRT下载到开发板,就免去了搭nfs.
3. 在开发板的 /etc/profile中追加:
exportQTDIR=/tq2440
export T_ROOT=/tslib
export PATH=$QTDIR/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
exportTSLIB_TSDEVICE=/dev/event0
exportTSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
exportQWS_MOUSE_PROTO=tslib:/dev/event0
export LD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
这里需要注意3句代码:
exportTSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/event0
exportQWS_MOUSE_PROTO=tslib:/dev/event0
有的开发板fb0event0是在/dev/input/目录下的
所以要改为
exportTSLIB_FBDEVICE=/dev/input/fb0
export TSLIB_TSDEVICE=/dev/input/event0
exportQWS_MOUSE_PROTO=tslib:/dev/input/event0
再执行一下:source /etc/profile使系统更新一遍刚设置的系统环境变量.
验证变量设置是否成功,在开发板终端下执行
echo $QTDIR
如果显示/tq2440,则说明设置成功了
4 接下来我们还得设置一下触摸屏的配置文件ts.conf.
它在哪里呢?前面我们已经拷到开发板/tslib/下,那么tslib一共就有bin etc include lib4个目录,而ts.conf就在etc目录下,开发板下用
vi /tslib/etc/ts.conf
把# module_raw input
前面的“#”号去掉,然后把该行移至行首
现在差不多移植完成了,可以把自己用qtcreator写的程序下载到板子运行.
我是在板子目录下新建mkdir test文件夹
上文已经说到已经把qtcreator做的界面编译成arm版的了,现在把这个可执行文件form下载到开发板/test目录下
在开发板执行:
cd /test
chmod a+x form //提示权限错误就加这句,没有提示加不加无所谓
./form -qws
会出现“relocation error:/usr/local/Trolltech/QtEmbedded-4.6.2-arm/lib/libQtGui.so.4: symbolpowf, version GLIBCXX_3.4 not defined in file libstdc++.so.6 withlink time reference”错误
我的解决办法是进入主机/opt/toolchains/arm920t-eabi/arm-angstrom-linux-gnueabi/lib目录下找到libstdc++.so.6链接的文件(通过右键属性——〉基本,可以看到链接的文件)libstdc++.so.6.0.8,重命名为libstdc++.so.6复制下载到开发板/tq2440/lib/目录下,之前别忘了将该文件夹下的libstdc++.so.6移到其它地方或重命名,如libstdc++.so.6.old。
*重命名其实是比较野蛮的方法,可以用ln命令的,参照下面这篇文章……
http://hi.baidu.com/a263238386/blog/item/362f01ce7b11a10a93457eae.html
然后再运行./form –qws,看问题是不是解决了!
现在可以看到开发板界面出现自己qt写的界面了
5.不过触摸屏还没有校准,进入开发板根目录/tslib
cdbin
./ts_calibrate //触摸屏校准程序
运行该程序,屏幕出现5点校准画面,依次点击,将生成触摸屏校准数据文件/etc/pointercal
./ts_test //触摸屏拖曳测试程序
可以用这个来测试校准的怎么样
6.开机自动启动qt 程序
如果想在开机后直接运行自己编的qt程序,而不想出现qt自带的那个界面只需把/etc/init.d/rcS中的
/bin/qtopia & 注释掉,前面加个#号就行:
#/bin/qtopia &
并在下面加上自己的启动程序
/tq2440/run.sh&
//添加一个执行脚本行,这个脚本因为在/etc/init.d/rcS中,所以会被自动运行(注意后面最好有个&,使他在后台执行,否则无法通过串口操作控制台)
修改echo "Starting Qtopia, please waiting..." >/dev/tty1
为echo "Starting myapps, please waiting..." >/dev/tty1
然后在/tq2440/目录下建立一个run.sh文件,内容如下:
#! /bin/sh
export QTDIR=/tq2440
export T_ROOT=/tslib
export PATH=$QTDIR/bin:$PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
exportTSLIB_TSDEVICE=/dev/event0 //这边可能有的开发板是export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
exportQWS_MOUSE_PROTO=tslib:/dev/event0 //同上,可能在/dev/input/event0
exportLD_LIBRARY_PATH=$T_ROOT/lib:$QTDIR/lib
/test/form-qws
重启之后,就可以看见自己添加的qt程序开机自动运行,并且我们可以正常使用触屏。原理就是qt程序依赖很多的动态共享库,在运行的时候必须找到这个共享库,所以在运行qt程序之前必须显式地指明这些共享库的所在位置
最后,还有个问题,显示的界面字体太小,有待下次解决
字体大小设置参照:http://kexieweb.guet.edu.cn/ask/forum.php?mod=viewthread&tid=38
到此,简单的界面就完成了
相关文章推荐
- 解决 version libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference
- error: /lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
- 解决 libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference
- version Base not defined in file libdevmapper.so.1.02 with link time reference
- not defined in file libmysqlclient.so.18 with link time reference
- error: /lib64/libc.so.6: symbol _dl_starting_up, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
- Reducing Link Failure Detection Time with BFD
- How to link with the correct C Run-Time (CRT) library
- cannot find the flags to link with Boost date_time 错误修复
- How to link with the correct C Run-Time (CRT) library
- Improving link time with IncrediBuild,减少联合编译器的链接是时间
- Shrinking the kernel with link-time garbage collection
- [转]Improving link time with IncrediBuild,减少联合编译器的链接是时间
- [转]link time code generation
- LINK : warning LNK4089: all references to “SHELL32.dll” discarded by /OPT:REF
- SQL Server 2008 Advanced Troubleshooting with Extended Events(reference)
- 309. Best Time to Buy and Sell Stock with Cooldown
- Use explicit instantiation to minimize compile time and link time;
- LGWR Is Generating Trace file with 'Warning Log Write Time 540ms, Size 5444kb' In 10.2.0.4 Database
- Failed to load resource: the server responded with a status of 504 (Gateway Time-out)