• 欢迎访问,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

linux 调用本人定义的函数静态库 的结果和放在一个程序里的调用函数的结果不一样了呢

C语言 码拜 2年前 (2017-05-08) 356次浏览
各位高手,本人又来问问题了,哎希望你们能帮本人解答一下下   谢谢!
LS是本人编译的平滑函数,对矩阵的一列元素进行平滑处理,输出的矩阵第一行、最后一行是原始函数第一行和第二行的平均、最后一行和倒数第二行的平均。其余中间的是相邻三行的平均。
//LS1.c
#include<stdio.h>
void LS(int (**Prebdata),int (**bDataLS),float a,float b,int b_lines,int b_points)
{
float  c=1-a-b;
int i,j;
for (j=0;j<b_lines;j++)
{
*((int*)bDataLS+j)=0.5*(*((int*)Prebdata+j))+0.5*(*((int*)Prebdata+j+b_lines));
*((int*)bDataLS+j+(b_points-1)*b_lines)=0.5*(*((int*)Prebdata+(b_points-2)*b_lines+j))+0.5*(*((int*)Prebdata+(b_points-1)*b_lines+j));
}
for (i=1;i<b_points-1;i++)
for(j=0;j<b_lines;j++)
{
*((int*)bDataLS+j+i*b_lines)=a*(*((int*)Prebdata+j+(i-1)*b_lines))+b*(*((int*)Prebdata+j+i*b_lines))+c*(*((int*)Prebdata+j+(i+1)*b_lines));
}
}
int main()
{
//  int b_lines=5;
//   int b_points=5;
float a=0.25;
float b=0.5;
int i;
int Prebdata[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
int bDataLS[5][5];
LS((int**)Prebdata,(int**)bDataLS,a,b,5,5);
for(i=0;i<5;i++)
{
printf(“%d\n”,bDataLS[i][0]);
}
}
上述函数运行结果正确:
3
6
11
16
18
然后本人将LS函数弄成静态库
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ vi LS1.c
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ gcc -c LS1.c -o ls.o
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ ar cqs libls.a ls.o
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ vi main.c
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ gcc -o main main.c -L ./ -lls
main.c: In function ‘main’:
main.c:11:4: warning: implicit declaration of function ‘LS’ [-Wimplicit-function-declaration]
LS((int**)Prebdata,(int**)bDataLS,a,b,5,5);
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ vi main.c
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ gcc -o main main.c -L ./ -lls
main.c: In function ‘main’:
main.c:11:4: warning: implicit declaration of function ‘LS’ [-Wimplicit-function-declaration]
LS((int**)Prebdata,(int**)bDataLS,a,b,5,5);
^
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ ./test
3
11
16
21
18
结果和之前的不一样了  这个结果是错误的,不知道为什么。希望有明白的高手帮本人解答一下   万分感谢!
解决方案

5

LS的逻辑可以再详细一些,不然不容易理解,第一行和第二行,怎么还跟原函数扯上关系了呢

30

引用

yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ gcc -o main main.c -L ./ -lls
main.c: In function ‘main’:
main.c:11:4: warning: implicit declaration of function ‘LS’ [-Wimplicit-function-declaration]
LS((int**)Prebdata,(int**)bDataLS,a,b,5,5);
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ vi main.c
yujiaxin@yujiaxin-HP-Pavilion-14-Notebook-PC:~$ gcc -o main main.c -L ./ -lls
main.c: In function ‘main’:
main.c:11:4: warning: implicit declaration of function ‘LS’ [-Wimplicit-function-declaration]
LS((int**)Prebdata,(int**)bDataLS,a,b,5,5);
^

你的函数没有声明。
默认的声明和你的函数定义不一致。

5

括号太多,参数传递也有问题,有越界的嫌疑;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明linux 调用本人定义的函数静态库 的结果和放在一个程序里的调用函数的结果不一样了呢
喜欢 (0)
[1034331897@qq.com]
分享 (0)