免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: heartk
打印 上一主题 下一主题

幼稚而又奇怪的问题 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2005-04-19 18:31 |只看该作者

幼稚而又奇怪的问题

可能你用的编译器不一样所致。
关于字节对齐的编译选项,
不同的编译器所用的选项不同。
你需要查找所用的编译器手册。

论坛徽章:
0
12 [报告]
发表于 2005-04-20 09:18 |只看该作者

幼稚而又奇怪的问题

我用的也是gcc呀,要加什么选项呢,另外怎么查手册,多谢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2005-04-20 09:40 |只看该作者

幼稚而又奇怪的问题

[quote]原帖由 "heartk"]我用的也是gcc呀,要加什么选项呢,另外怎么查手册,多谢[/quote 发表:

去http://gcc.gnu.org,
有在线手册。

论坛徽章:
0
14 [报告]
发表于 2005-04-20 18:15 |只看该作者

幼稚而又奇怪的问题

我找了半天也没发现什么问题,不知使用pro*c编程的大虾吗,有没有遇到过类似的问题,
我试了以下几步,总结一下请帮忙分析:
1)        加了__attribute__((packed));后包含pro*c在linux下执行没有任何问题
2)        加了__attribute__((packed));不包含pro*c在solaris 9编译命令gcc –o test test.c不加任何编译选项也没有任何问题
3)        不加__attribute__((packed));包含pro*c在solaris 9 下用自己写的makefile编译也没有任何问题
4)        加了__attribute__((packed));后包含pro*c在solaris 9 下用自己写的makefile就编译不成功
原来我怀疑是makefile的问题,但是根据2)和3),如果加了__attribute__((packed));不需要加特别选项的话,makefile的问题可能性比较小,是不是solaris 9,oracle 9版本不支持如果加了__attribute__((packed));呢,有没有人有过类似的经验。
谢谢

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
15 [报告]
发表于 2005-04-20 18:23 |只看该作者

幼稚而又奇怪的问题

为什么要去掉对齐?

论坛徽章:
0
16 [报告]
发表于 2005-04-21 13:01 |只看该作者

幼稚而又奇怪的问题

因为我要用结构处理协议包,如果不去掉对齐,按照sizeof取字节的时候会错,不知不去掉对齐有什么好办法。
我把代码贴到下边,谁能帮我在solaris 9 ,oracle 9i环境下编译下,谢谢
  1. #include <stdlib.h>;
  2. #include <sys/ipc.h>;
  3. #include <stdio.h>;
  4. #include <string.h>;
  5. #include <fcntl.h>;
  6. #include <unistd.h>;
  7. #include <sys/types.h>;
  8. #include <sys/stat.h>;
  9. #include <sys/time.h>;
  10. #include <sys/socket.h>;
  11. #include <netinet/in.h>;
  12. #include <arpa/inet.h>;
  13. #include <pthread.h>;
  14. #include <sys/msg.h>;
  15. #include <netdb.h>;
  16. #include <errno.h>;
  17. #include <sys/ioctl.h>;

  18. #include <math.h>;
  19. #include <iconv.h>;
  20. #include    <ctype.h>;
  21. #include    <time.h>;
  22. #include    <sys/uio.h>;
  23. #include    <sys/wait.h>;
  24. #include    <sys/un.h>;
  25. #include    <limits.h>;
  26. #include    <unistd.h>;
  27. #include    <arpa/nameser.h>;
  28. #include    <resolv.h>;
  29. #include    <signal.h>;
  30. #include    <stdarg.h>;

  31. #include <sqlca.h>;
  32. #include <oraca.h>;
  33. #include <sqlda.h>;
  34. #include <sqlcpr.h>;

  35. typedef struct
  36. {
  37.         uint8_t         fsuid[14];
  38.         uint32_t        head;
  39.         uint8_t           uptime[6];
  40.         uint8_t         cmd;       
  41. }__attribute__((packed)) ai_packet;


  42. void initdb();

  43. main()
  44. {
  45.         struct  ai_packet asp;
  46.         printf("aip=%d\n  csp=%d\n",sizeof(aip));
  47.         initdb();
  48.        
  49.         printf("haha\n");
  50. }

  51. void initdb()
  52. {
  53.    EXEC  SQL  BEGIN  DECLARE     SECTION;
  54.              VARCHAR    username[20];
  55.              VARCHAR    password[20];
  56.              VARCHAR    db_name[20];
  57.    EXEC  SQL  END  DECLARE   SECTION;
  58.    
  59.    strcpy((char *)username.arr,"wyj");
  60.    username.len=strlen((char *)username.arr);
  61.    strcpy((char  *)password.arr,"wyj");
  62.    password.len=strlen((char *)password.arr);
  63.    strcpy((char *)db_name.arr,"bakkgl");       
  64.    db_name.len=strlen((char *)db_name.arr);
  65.    
  66.    EXEC SQL  CONNECT :username  IDENTIFIED  BY :password USING :db_name;
  67.    
  68.    if (sqlca.sqlcode!=0)
  69.    {
  70.        printf("sqlca.sqlcode=%d,fail to connect\n",sqlca.sqlcode);   
  71.        exit(0);
  72.    }
  73. }
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2005-04-21 13:31 |只看该作者

幼稚而又奇怪的问题

4) 加了__attribute__((packed));后包含pro*c在solaris 9 下用自己写的makefile就编译不成功
是不是因为你用pro *C编译时,
这个预编译器不能正确处理这个选项呀。
看来你还得查一查pro*c得编译选项。

你还可以这样试试,先不加
__attribute__((packed));
用 pro*c把你的.pc文件预编译成.c文件之后,
你在更改.c文件,加上__attribute__((packed));,
然后再用gcc编译。
只是一个建议,试试吧。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
18 [报告]
发表于 2005-04-21 13:47 |只看该作者

幼稚而又奇怪的问题

就算对齐了对你程序应该不会产生什么影响吧?除非你是用绝对偏移(一个常量,如ptr+31等)去索引一个变量
对齐了相当于在你的结构体中增加了几个字节的reserve数据,也可以自己显式地加上

论坛徽章:
0
19 [报告]
发表于 2005-04-26 18:24 |只看该作者

幼稚而又奇怪的问题

lenovo大哥,不好意思请您指点一下,我该如何单步呢?
我想两步:
1、将pc预编译为c
$ORACLE_HOME/bin/proc iname=file.pc onem=file.c
这步对不对,要注意些什么呀
2、将c编译为exe
gcc -o aout  *.c
这样对不对呀,我怎么编译还是有问题呢,请指教

论坛徽章:
0
20 [报告]
发表于 2005-04-27 15:20 |只看该作者

幼稚而又奇怪的问题

有谁对PRO*c编程熟啊,指点指点啊,我都急死了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP