请教--有关 LINUX 下链接动态库的问题!

OneGun 2006-05-09 01:44:38
我在LINUX 下安装了INTEL @IPP(试用版)的库,安装完之后只有.so动态库文件,没有.a文件。我调试了一个安装目录下的例子,它调用的是.a库文件,在它的Makefile里面我把它改成链接相应的动态库文件。例子里的源文件有 : Filtering.c和filter.c(.h文件已经包含在源文件里面);链接的动态库文件是:libFiltering.so(原名是 l_ipp_WMMX50LNX_r.so,我把名字改了),并把这个文件拷到了源文件所在的目录,之后我用下面的命令对文件进行编译:
arm-linux-gcc Filtering.c filter.c -L. -lFiltering -o FILT
编译结果如下:

root:/opt/intel/ipp/5.0/pca_wmmx/include/Filtering # arm-linux-gcc Filtering.c filter.c -L. -lFiltering -o FILT
/tmp/cc1h8jsp.o(.text+0x77c): In function `UserInterface':
: warning: the `gets' function is dangerous and should not be used.
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsAdd_16s_I' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsToneQ15_16s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsNorm_L2_16s32s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsRandGauss_16s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsZero_16s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsCopy_16s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsFIR_Direct_16s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsIIR_BiQuadDirect_16s' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsLn_16s_ISfs' are not defined
./libFiltering.so: undefined reference to `ippsMalloc'
./libFiltering.so: undefined reference to `ippsFree'
collect2: ld returned 1 exit status

请问各位高手这是不是因为库没有链接上?还有从最后两行的错误
./libFiltering.so: undefined reference to `ippsMalloc'
./libFiltering.so: undefined reference to `ippsFree'
来看,库是不是也有问题?
...全文
442 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
OneGun 2006-05-10
  • 打赏
  • 举报
回复
问题已经得到部分解决,ippsMalloc和ippsFree在头文件中是有声明的,但是没有具体定义,我找到了定义他们的一个源文件并把这个源文件和我要编译的文件一起编译就OK了。

但是还是要报出上面出现过的警告,,,,,哪位高手知道的帮帮忙??
多谢了...!

OneGun 2006-05-10
  • 打赏
  • 举报
回复
是不是这个库必须包含某个头文件但是却没有包含?
有没有办法在外面给已经生成的.so文件加一个头文件?
OneGun 2006-05-09
  • 打赏
  • 举报
回复
我查看了源文件,里面调用库的地方只有一处:ippsFIR_Direct_16s().
为了让大家更明白这些文件的结构,我把目录里面的文件再跟大家说一下:
源文件: Filtering.c filter.c
头文件: filter.h ippdefs.h...(ipp的公共头文件,我把他们从安装目录的/include里拷了过 来.
动态库: libFiltering.so (也是从安装目录/bin下拷过来的,并且改了名字)

疑问如下:
1)真的不明白为什么会有:
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsAdd_16s_I' are not defined
/usr/local/arm-linux/lib/gcc-lib/arm-linux/3.3.2/../../../../arm-linux/bin/ld: warning: type and size of dynamic symbol `ippsToneQ15_16s' are not defined
.................
这些警告?这些警告是什么意思?
2)而且报的错误
./libFiltering.so: undefined reference to `ippsMalloc'
./libFiltering.so: undefined reference to `ippsFree'
也是让人不理解,在所包含的头文件里是有 ippsMalloc 和 ippsFree的声明的。"undefined reference "到底是什么意思?

谢谢了..>!
shavey 2006-05-09
  • 打赏
  • 举报
回复
是你调用库的程序的代码。
OneGun 2006-05-09
  • 打赏
  • 举报
回复
你说的是库的代码还是调用库的程序的代码 ?
那个库是没有源代码的啊 ,只有一个.so文件。
shavey 2006-05-09
  • 打赏
  • 举报
回复
如果库没链接上,应该会提示-lFiltering出错的吧,应该是你在调用库的时候出的错,查查你调用库的代码吧。
OneGun 2006-05-09
  • 打赏
  • 举报
回复
我用 make 命令进行编译得到的结果也是一样的 。
希望高手帮帮忙。。。!

18,828

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧