移植alsa-lib遇到的问题
移植alsa-lib遇到的问题
linux audio alsa lib VERSIONED_SYMBOLS
这两天移植alsa lib时遇到了一个问题,被困住了好久。
做个记录,以后再被相同问题困住。
问题背景是这种。有个项目,客户要求使用新的alsa-lib库。
到alsa官网上看了下。最新的是1.0.28。
既然能够要用新的。咱们就彻底满足客户,用个最新的。
接下来看看遇到了什么问题。
事实上项目中曾经也有alsa lib库,毕竟alsa是眼下linux系统普遍採用的音频架构。
移植起来事实上也没什么麻烦的。
首先,代码搞过来。
然后。运行configure,来生成一堆东东,当中最重要的一个是config.h文件。
一般linux下,应用程序或应用层的库文件。接下来就是make 和make install。
因为我们系统中有自己的make 脚本,所以这两步被我们自己的make 命令所替代。
第一个遇到的问题是:
externals/alsa-lib/src/alisp/alisp.c: In function 'obj_type_str':
externals/alsa-lib/src/alisp/alisp.c:1028:1: error: control reaches end of non-void function [-Werror=return-type]
看错误提示能够知道。这是一个类型非void的函数没有返回值。
可是从[-Werror=return-type]可知,这事实上是一个 warning,仅仅是被作为error对待了。
为什么会被作为error对待,由于有-Werror=return-type的配置。
在locl compile flag中,增加-Wno-error=return-type。问题解决。
上面这个问题非常快被消灭。以下这个问题则费了我不是血。
问题提示:
/ld: failed to set dynamic section sizes: Bad value
编译是我的弱项。一见到编译问题,就感觉束手无策。
事实上万果皆有因。没有无缘无故的错误。
先看了下error之前的编译log,没发现实用的信息。
接下来找度娘帮忙。
也有人遇到过类似问题。看到的一个该问题的解决方式是,其代码中有个函数声明了但没定义,导致了该问题,加上该函数定义,问题解决。
alsa lib的代码不是我写的。有没有声明了但没定义的函数。我也不知道。
alsa lib库的代码量也非常可观,检查一遍仅仅能是想想而已。
检查编译log,发现開始有非常多warning提示一些宏反复定义了。
通过#ifndef,将这些warning解决。
编译还是有相同的问题。
编译log中另一些函数參数未被使用的warning,找到这些函数看了下,没发现函数实现有哪个函数没定义(相应前面网上的解决方式)。
是不是在configure的时候有些參数指定的不正确,导致有问题?
网上搜了搜别人的移植案例,没发现与我的配置不一致的地方。
既然configure的一个重要功能是生成config.h文件。那就比較下新生成的config.h文件与之去workable版本号的config.h文件有什么差别。
比較发现,还是有不少差别。
先用旧的config.h替换过来。
make。通过了!
!
!
肯定是config.h的问题了。
通过逐类排除,最后发现新的config.h中多了个下面定义:
/* compiled with versioned symbols */
#define VERSIONED_SYMBOLS /**/
把该定义删除,编译就ok了。
用百度搜索该宏,发现有人已经遇到过相同的问题(度娘还是有两下子的):
http://www.android100.org/html/201409/16/65158.html
看到该定义,想起来编译错误之前有一句提示:
libasound.so: version node not found for symbol snd_ctl_elem_info_get_dimension@@ALSA_0.9.3
只是,度娘也仅仅有两下子。
想看看VERSIONED_SYMBOLS的说明,还得靠谷歌。
http://infocenter.arm.com/help/index.jsp?
topic=/com.arm.doc.dui0206j/Beijfhhg.html
You can add specially-named symbols to input objects that cause the linker to create symbol versions. These symbols are of the form:
name@version for a non-default version of a symbol
name@@version for a default version of a symbol.
You must define these symbols, at the address of the function or data, as that you want to export. The symbol name is divided into two parts, a symbol name name and a version definition version. The name is added to the dynamic symbol table and becomes part
of the interface to the shared object. Version creates a version called ver if it does not already exist and associates name with the version called ver.
For more information on how to create version symbols, see:
Adding symbol versions in the Compiler User Guide
Chapter 2 Writing ARM Assembly Language in the Assembler Guide.
Example 4.6 places the symbols foo@ver1,foo@@ver2, and
bar@@ver1 into the object symbol table:
Example 4.6. Creating versioned symbols, embedded symbols
int old_function(void) __asm__("foo@ver1");
int new_function(void) __asm__("foo@@ver2");
int other_function(void) __asm__("bar@@ver1");
The linker reads these symbols and creates version definitions ver1 and ver2. The symbol foo is associated with a non-default version of ver1, and with a default version of ver2. The symbol bar is associated with a default version of ver1.
预计alsa lib中并未定义foo@ver1和foo@@ver2类似的东东,所以出现了前面的错误。
解决的方法即删除:
#define VERSIONED_SYMBOLS
There is no way to create associations between versions with this method.
移植alsa-lib遇到的问题的更多相关文章
- ALSA lib编译
http://blog.sina.com.cn/s/blog_7d7e9d0f0101lqlp.html alsa lib: #!bin/sh rm -rf ./output/* mkdir -p ...
- ALSA lib基本概念
1.channel 通道,即我们熟知的声道数.左/右声道,5.1channel等等 2.sample A sample is a single value that describes the amp ...
- Arm-Linux 移植 alsa
ref : https://www.cnblogs.com/yutingliuyl/p/6718875.html https://blog.csdn.net/yuanxinfei920/article ...
- ALSA lib调用实例
1. Display Some PCM Types and Formats 2. Opening PCM Device and Setting Parameters /* This example o ...
- 基于tiny6410的madplay播放器的移植
在移植madplay之前需要先将所需要的库移植到开发板的文件系统中. 现在每个解压后的文件夹中创建一个文件夹 zlib-1.1.4.tar.gz 解压:tar xvzf zlib-1.1.4.tar ...
- OK6410移植madplay播放器,王明学learn
对于ok6410的madplay移植主要包括三部分.声卡驱动移植,播放器的移植,以及alsa库的移植. 一.首先移植声卡驱动以及播放器 ok6410采用WM97系列的声卡芯片,要使得内核支持该驱动,首 ...
- alsa-lib及alsa-utils成功移植(原…
准备工作 alsa-lib版本:alsa-lib-1.0.23.tar.bz2 alsa-util版本:alsa-utils-1.0.23.tar.bz2 其他版本的alsa-lib和alsa-uti ...
- 36、ALSA声卡驱动和应用
(注意:内核上电的时候会把一些没运行的控制器模块的时钟都关掉,所有在写驱动的时候需要在使用的使用使用clk_get和clk_enable使能时钟) (说明:与ALSA声卡对应的是OSS架构,第二期视频 ...
- alsa-lib及alsa-utils成功移植(转载)
准备工作 alsa-lib版本:alsa-lib-1.0.23.tar.bz2 alsa-util版本:alsa-utils-1.0.23.tar.bz2 其他版本的alsa-lib和alsa-uti ...
随机推荐
- ASP.NET配置设置-关于web.config各节点的讲解
在msdn中搜索:“ASP.NET配置设置”,可以查看各个节点的配置. httpRuntime 元素:配置 ASP.NET HTTP 运行时设置,以确定如何处理对 ASP.NET 应用程序的请求.
- c++中set容器的功能及应用。
set的特性是,所有元素都会根据元素的键值自动排序(默认为升序),set中不允许两个元素有相同的键值. set基本操作: 1.头文件 #include<set>. 注:一定要加上using ...
- 解决ul的li横向排列换行的问题
1. 问题现象 先看下面的html结构: <div> <ul> <li><img src='./img/1.jpg'></li> <l ...
- [luoguP2774] 方格取数问题(最大点权独立集)
传送门 引入两个概念: 最小点权覆盖集:满足每一条边的两个端点至少选一个的最小权点集. 最大点权独立集:满足每一条边的两个端点最多选一个的最大权点集. 现在对网格染色,使得相邻两点颜色不同,之后把两个 ...
- 洛谷P2664 树上游戏 【点分治 + 差分】
题目 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 现在他想让你求出所有的sum[i] 输入格式 第一行为一个整数n,表示树节点的数量 ...
- [HDU4362] Palindrome subsequence (区间DP)
题目链接 题目大意 给你几个字符串 (1<len(s)<1000) ,要你求每个字符串的回文序列个数.对于10008取模. Solution 区间DP. 比较典型的例题. 状态定义: 令 ...
- 【bzoj2301】[HAOI2011]Problem b 莫比乌斯反演
Description 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. Input 第一行一个整数 ...
- 富文本编辑器quill---vue组件(vue-quill-editor)的使用
1.配置webpack plugin 解决以下报错 Uncaught TypeError: Cannot read property 'imports' of undefined (image-res ...
- 解决v-for产生的警告的办法
当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略.如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且 ...
- Metasploit笔记之信息收集命令
书籍参考:Metasploit渗透指南 Nmap:使用没有时 ubuntu自动提示安装命令 用法: nmap -sS -Pn 192.168.1.0 -sS:执行一次隐秘的tcp扫描 -Pn:不使用 ...