投影仪过热自动关机放一段时间就自动关机

[原]动态库的gcc版本不一致造成的编译问题的解决办法 - 推酷
[原]动态库的gcc版本不一致造成的编译问题的解决办法
在Linux上使用更高的gcc/g++版本编译生成的动态库来链接应用程序时,会出现“/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found”的问题。
我们使用ldd检查动态库的依赖性,如下所示。
[root@localhost lin32]# lddlibcxxsingletondll.so
./libcxxsingletondll.so:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by./libcxxsingletondll.so)
&&&&&&&& linux-gate.so.1=&& (0x)
&&&&&&&& libstdc++.so.6=& /usr/lib/libstdc++.so.6 (0x001be000)
&&&&&&&& libm.so.6=& /lib/libm.so.6 (0x00d36000)
&&&&&&&& libgcc_s.so.1=& /lib/libgcc_s.so.1 (0x)
&&&&&&&& libc.so.6=& /lib/libc.so.6 (0x002ab000)
&&&&&&&& /lib/ld-linux.so.2(0x007cc000)
原因在于libstdc++.so.6的版本过低,需要下载新版本的lib文件重新建立连接才行。
&&&&&&&& 使用strings命令检查libcxxsignletondll.so使用的GLIBC的版本:
[root@localhost lin32]# stringslibcxxsingletondll.so | grep GLIBC
GLIBC_2.1.3
GLIBC_2.3.2
GLIBCXX_3.4.9
GLIBCXX_3.4.14
GLIBCXX_3.4.11
GLIBCXX_3.4
&&&&&&&& 使用strings命令检查libstdc++.so使用的GLIBC版本:
[root@localhost lin32]# strings/usr/lib/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.1.3
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
&&&&&&&& 从上面可以看出libstdc++.so.6中缺少GLIBCXX_3.4.14,所以会出现GLIBCXX_3.4.14没有找到的错误。
检查/usr/lib目录下的libstdc++.so.6的库文件:
[root@localhost lin32]# ll/usr/lib/libstdc++.so.6*
lrwxrwxrwx. 1 root root&&&& 19 12月& 2 2010 /usr/lib/libstdc++.so.6 -&libstdc++.so.6.0.13
-rwxr-xr-x. 1 root root 月 26 2010/usr/lib/libstdc++.so.6.0.13
&&&&&&&& 发现libstdc++.so.6链接到libstdc++.so.6.0.13上,但是libcxxsingletondll.so需要使用的是libstdc++.so.6.0.14。
&&&&&&&& 百度下libstdc++.so.6.0.14,找到该库的网址:
从其它版本高的机器上拷贝libstdc++.so.6.0.14到本地,然后拷贝到/usr/lib目录下,并且建立软链接,命令如下:
# sodu ln -sf libstdc++.so.6.0.14libstdc++.so.6
[root@localhost lin32]# stringslibstdc++.so.6.0.14 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBC_2.3.4
GLIBC_2.1.3
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致Andriod源码编译时的GCC版本问题解决 . - 柯南 - ITeye技术网站
博客分类:
编译MTK6516的Android代码时,需要用到Gcc_4.1.2(MTK指定了这个版本的Gcc)。
而我的ubuntu10.04自带版本为Gcc_4.4.3。
处理步骤如下:
1. 首先下载所需的文件,我下载deb包,地址/ubuntu/pool/universe/g/gcc-4.1/
2. Gcc deb包存在依赖关系,安装顺序如下
32位安装GCC4.1.2
sudo dpkg -i gcc-4.1-base_4.1.2-27ubuntu1_i386.deb
sudo dpkg -i cpp-4.1_4.1.2-27ubuntu1_i386.deb
sudo dpkg -i cpp-4.1-doc_4.1.2-27ubuntu1_all.deb
sudo dpkg -i gcc-4.1_4.1.2-27ubuntu1_i386.deb
sudo dpkg -i gcc-4.1-multilib_4.1.2-27ubuntu1_i386.deb
sudo dpkg -i gcc-4.1-doc_4.1.2-27ubuntu1_all.deb
/*两个deb要一起输入,他们相互依赖,让系统自己处理*/
sudo dpkg -i g++-4.1_4.1.2-27ubuntu1_i386.deb libstdc++6-4.1-dev_4.1.2-27ubuntu1_i386.deb
sudo dpkg -i g++-4.1-multilib_4.1.2-27ubuntu1_i386.deb
64位安装
sudo dpkg -i gcc-4.1-base_4.1.2-27ubuntu1_amd64.deb
sudo dpkg -i cpp-4.1_4.1.2-27ubuntu1_amd64.deb
sudo dpkg -i cpp-4.1-doc_4.1.2-27ubuntu1_all.deb
sudo dpkg -i gcc-4.1_4.1.2-27ubuntu1_amd64.deb
sudo dpkg -i gcc-4.1-multilib_4.1.2-27ubuntu1_amd64.deb
sudo dpkg -i gcc-4.1-doc_4.1.2-27ubuntu1_all.deb
/*两个deb要一起输入,他们相互依赖,让系统自己处理*/
sudo dpkg -i g++-4.1_4.1.2-27ubuntu1_amd64.deb libstdc++6-4.1-dev_4.1.2-27ubuntu1_amd64.deb
sudo dpkg -i g++-4.1-multilib_4.1.2-27ubuntu1_amd64.deb
3. 这时,系统里面会有2个版本的GCC,缺省的还是原来默认的GCC 4.4.3,我们可以更改系统的默认配置。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 40
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 30
设置默认编译器,如下
sudo update-alternatives --config gcc
有 2 个选项可用于替换项 gcc (提供 /usr/bin/gcc)。
& 选择&&&&&& 路径&&&&&&&&&&& 优先级& 状态
------------------------------------------------------------
* 0&&&&&&&&&&& /usr/bin/gcc-4.4&& 40&&&&&&& 自动模式
& 1&&&&&&&&&&& /usr/bin/gcc-4.1&& 30&&&&&&& 手动模式
& 2&&&&&&&&&&& /usr/bin/gcc-4.4&& 40&&&&&&& 手动模式
选择“1”。
4. 此时在命令行输入
1.gcc --version&
gcc (GCC) 4.1.3
(prerelease) (Ubuntu 4.1.2-27ubuntu1)
Copyright (C) 2006 Free Software Foundation, Inc.
T see the source for copying conditions.& There is NO
not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5.首先运行
./makeMtk --help
可以看到包含的project_name
./makeMtk project_name new
此时会检查本地环境,不符合编译条件的软件版本会被列出在checkenv.log文件中。
打开这个文件,可以看到:
Suggested Linux OS and Tool Chain to install
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ Build System Requirment:
+ Linux OS&&&& : RedHat Enterprise Linux Server 5.4 or Ubuntu 9.10/Ubuntu 10.04
+ arm-eabi-gcc : Version 4.4.0
+&&&&&& Perl&&&&&&&& : Version 5.8.X
+ Python&&&&&& : Version 2.5.X
+ Gcc&&&&&&&&& : Version 4.1.2
+ JDK&&&&&&&&& : Version 1.5 (1.6 is Not Supported)
+ Wine&&&&&&&& : Version 1.1 or above
+ Make&&&&&&&& : GNU Make 3.81 or above
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
在此案中,我没有安装arm-eabi-gcc,Wine;另外GCC版本过高(4.2.2),JDK版本也过高。
这两点我分别写了两个文章
《Andriod源码编译时的GCC版本问题解决》,《Andriod源码编译时的JDK版本问题解决》。
这里只记录arm-eabi-gcc,Wine的问题。
6. 安装Wine
sudo apt-get install wine1.2
7. 安装arm-eabi-gcc
在项目原文件根目录下输入:
find -name arm-eabi-gcc
./prebuilt/darwin-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc
./prebuilt/darwin-x86/toolchain/arm-eabi-4.3.1/bin/arm-eabi-gcc
./prebuilt/darwin-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
./prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc
./prebuilt/linux-x86/toolchain/arm-eabi-4.3.1/bin/arm-eabi-gcc
./prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
根据checkenv.log中的suggestion,选用arm-eabi-4.4.0,即把这个bin目录的绝对路径加入到环境变量的PATH中。
export PATH="$PATH:/source_files_path/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/"
当一切就绪后,就可以编译代码了。
我采用的开发模式是编译出ramdisk.img,system.img,userdata.img并拷到SDK中,运行模拟器来查看效果。
编译这几个img的命令是
./mk emulator new
浏览: 286694 次
来自: 深圳
服务器用什么实现
只放debug.keystore但是没给密码啊。。。。。。
[color=green][size=x-small][ali ...
用你这个方法为什么我只想模拟点击 无法实现啊CUDA使用的GCC版本和现有版本不兼容
CUDA使用的GCC版本和现有版本不兼容
  安装了最新的gcc 4.7,和 CUDA toolkit4.2,尝试编译后发现错误:
  error -- unsupported GNU version! gcc 4.5 and up are not supported!
  解决方法使用openSUSE 12.1 自带的gcc4.6版本进行编译通过。具体过程如下:
  sudo ln -s /usr/bin/gcc-4.6 /usr/local/cuda/bin/gcc
  sudo ln -s /usr/bin/g++-4.6 /usr/local/cuda/bin/g++
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&将低版本gcc编译过的程序移植到高版本GCC时, 可能会出现一些兼容性问题. 原因是, 为了适应新的标准,一些旧的语法规则被废弃了. 关于这方面的一些具体资料可从查询. 这里只是自己遇到的其中一个问题.
In instantiation of &int t(T) [with T = int]&
required from here
error: &f& was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
note: &int f(int)& declared here, later in the translation unit
&The C++ compiler no longer performs some extra unqualified lookups it had performed in the past, namely dependent base class scope lookups and unqualified template function lookups.
C++ programs that depended on the compiler's previous behavior may no longer compile. For example, code such as
//foo1.cpptemplate&typename T&
int t(T i)
{ return f(i); }
{ return }
return t(1);
To fix, make sure the function f in the code above is declared before first use in function t. Like so:
//foo2.cppint
{ return }
template&typename T&
int t(T i)
{ return f(i); }
return t(1);
意思是说, C++编译器不再支持那种非标准的模板类中函数查找方式,如foo1.cpp所示, 在定义模板类时使用的函数在该模板类之前未定义, 而是在该模板类之后定义. 早期的C++编译器支持向后查找. 但是新标准出来后, 该方式被废除了. 因此会报错. 如foo2.cpp所示, 在模板类中使用某个函数之前应先对该函数进行定义. 这才是正确的姿势.
&Or this can be temporarily worked around by using -fpermissive.
第一种方法方法可以从根本上解决问题, 但是有情况是我们编译别人的程序, 并且程序十分复杂, 不是我们可以轻易改变的. 这时有个临时性的方法, 那便是在编译时添加 -fpermissive 选项. 我自己的项目是利用Cmake进行构建的, 因此只需要在 CmakeList.txt 文件中添加一行: ADD_DEFINITIONS(-fpermissive), 然后重新 cmake 一下即可. 此时将错误降为警告, 可顺利通过编译.
阅读(...) 评论()

我要回帖

更多关于 投影仪自动关机的原因 的文章

 

随机推荐