免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 3165 | 回复: 20
打印 上一主题 下一主题

我的静态库的问题,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-20 09:32 |只看该作者 |倒序浏览
静态库源码(testa.c):

#include "pub.h"
#include <stdio.h>;
    testa3(int *i, char *string)
   {
       memcpy(string, "ssssss", strlen(string));
       *i = 99;
       return 0;
   }
   
  调用静态库的源码(test.c):
  
  #include "pub.h"
void main()
{
   int i;
   char str[40];

   testa3(&i,str);
   printf("str:%s\n",str);

   return;
}

头文件 pub.h:

int  testa3(int *i, char *string);

编译静态库:
cc -c testa.c
ar r libtesta.a testa.o

编译test.c
  cc -L. -ltesta test.c
  
  
  报错:
  undefined                       first referenced
symbol                             in file
testa3                              test.o
i386ld fatal: Symbol referencing errors. No output written to a.out

诸位大哥帮我看看怎么回事,谢谢//bow

论坛徽章:
0
2 [报告]
发表于 2004-05-20 09:41 |只看该作者

我的静态库的问题,谢谢

老大们,怎么不回复一下呢。
这个对于用过静态库的应该是小问题了吧。
俺没用过,谢谢//bow

论坛徽章:
0
3 [报告]
发表于 2004-05-20 09:44 |只看该作者

我的静态库的问题,谢谢

1.testa.c中应该include <string.h>;
2.test.c中应该include <stdio.h>;
3.pub.h中应该define PUB_H
4.testa.c中memcpy的后果不可知,因为test.c中str没赋值
5.编译test.c使用cc test.c -L. -ltesta

论坛徽章:
0
4 [报告]
发表于 2004-05-20 09:56 |只看该作者

我的静态库的问题,谢谢

非常感谢,ok了
宁外还有一个不明白define PUB_H是干什么用的?

论坛徽章:
0
5 [报告]
发表于 2004-05-20 09:57 |只看该作者

我的静态库的问题,谢谢

防止pub.h被include多次。你看一下stdio.h的头尾写法。

论坛徽章:
0
6 [报告]
发表于 2004-05-20 10:36 |只看该作者

我的静态库的问题,谢谢

学习新知识,回报大众:

1. 静态库libtesta.a生成:源码testa.c,
    cc -c testa.c
    ar r libtesta.a testa.o

2. 联接静态库(libtesta.a)的动态库(libtest.so)生成编译:
    cc -G -dy -o libtest.so test.c -L. -ltesta
   
3. 联接动态库(libtest.so)的c源码(td.c)编译(生成a.out):
    cc -g -belf -ltest td.c
  
4. 联接静态库(libtesta.a)的c源码(t.c)编译(生成a.out):
    cc t.c -L. -ltesta

论坛徽章:
0
7 [报告]
发表于 2004-05-20 10:59 |只看该作者

我的静态库的问题,谢谢

原帖由 "tena" 发表:
学习新知识,回报大众:

1. 静态库libtesta.a生成:源码testa.c,
    cc -c testa.c
    ar r libtesta.a testa.o

2. 联接静态库(libtesta.a)的动态库(libtest.so)生成编译:
    cc -G -dy -o libtest.so..........

好同志,有总结必会有提高,
不过看你动态库的-G 选项,是SCO吧.
其他平台略有不同.
LINUX DLLFLG = -Wall -fpic
HP-UX DLLFLG = +z +u
... ...

论坛徽章:
0
8 [报告]
发表于 2004-05-20 13:40 |只看该作者

我的静态库的问题,谢谢

老兄好眼力,就是SCO,看来你用过的平台挺多,佩服。
FH看来也是老人家了,
以后有了问题多向大家请教请教//bow

论坛徽章:
0
9 [报告]
发表于 2004-05-20 14:32 |只看该作者

我的静态库的问题,谢谢

原帖由 "FH" 发表:
1.testa.c中应该include <string.h>;
2.test.c中应该include <stdio.h>;
3.pub.h中应该define PUB_H
4.testa.c中memcpy的后果不可知,因为test.c中str没赋值
5.编译test.c使用cc test.c -L. -ltesta

指出了原程序的不足和编译错误的解决之策,很好。但是其中的“4.testa.c中memcpy的后果不可知,因为test.c中str没赋值”这一句,可能是FH疏忽了。其实在这里是没有问题的,因为执行 testa3(&i,str); 这个语句的目的就是给str数组赋值的,请大家注意。

论坛徽章:
0
10 [报告]
发表于 2004-05-20 14:36 |只看该作者

我的静态库的问题,谢谢

原帖由 "whyglinux" 发表:

指出了原程序的不足和编译错误的解决之策,很好。但是其中的“4.testa.c中memcpy的后果不可知,因为test.c中str没赋值”这一句,可能是FH疏忽了。其实在这里是没有问题的,因为执行 testa3(&i,str); 这个语句的目的..........

窃以为不是疏忽,良好的编程风格要求:
char szStr[40] = "";
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP