Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4247944
  • 博文数量: 447
  • 博客积分: 1241
  • 博客等级: 中尉
  • 技术积分: 5786
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-27 06:48
个人简介

读好书,交益友

文章分类

全部博文(447)

文章存档

2024年(1)

2023年(5)

2022年(29)

2021年(49)

2020年(16)

2019年(15)

2018年(23)

2017年(67)

2016年(42)

2015年(51)

2014年(57)

2013年(52)

2012年(35)

2011年(5)

分类: C/C++

2012-11-07 11:17:14

4年不用apr写程序,发现apr变化了不少
出现/usr/local/apr/include/apr-1/apr.h:358: 错误:expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘apr_off_t’
打开apr.h 358行
typedef off64_t apr_off_t;
应该是off64_t 没定义, grep off64_t  /usr/include/*.h
发现unistd.h 中:

# if defined __USE_LARGEFILE64 && !defined __off64_t_defined
typedef __off64_t off64_t;
# define __off64_t_defined
# endif

 __USE_LARGEFILE64 没有被定义,  grep __USE_LARGEFILE64  /usr/include/*.h
发现features.h 中

#ifdef _LARGEFILE64_SOURCE
# define __USE_LARGEFILE64 1
#endif
解决办法有如下几个
1 文件第一行定义  define 了 _LARGEFILE64_SOURCE ,不建议使用
2 修改apr.h change "off64" into "long long" of the file /usr/local/apr/include/apr-1/apr.h
 typedef off64 apr_off_t  -> typedef long long apr_off_t
3 编译的时候加上 -D_LARGEFILE64_SOURCE
创建文件 test.c
#include "apr_pools.h"
#include
 
int main()
{
    apr_pool_t *root;
    apr_pool_initialize();//初始化全局分配子(allocator),并为它设置mutext,以用于多线程环境,初始化全局池,指定全局分配子的owner是全局池
    apr_pool_create(&root,NULL);//创建根池(默认父池是全局池),根池生命期为进程生存期。分配子默认为全局分配子
    {
        apr_pool_t *child;
        apr_pool_create(&child,root);//创建子池,指定父池为root。分配子默认为父池分配子
        void *pBuff=apr_palloc(child,sizeof(int));//从子池分配内存
      
        apr_pool_destroy(child);//释放子池,将内存归还给分配子
    }
    apr_pool_destroy(root);//释放父池,
    apr_pool_terminate();//释放全局池,释放全局allocator,将内存归还给系统
 getchar();
    return 1;
}
环境变量设置如何
1). export LD_LIBRARY_PATH=/usr/local/apr/lib
 
 2). -I/usr/local/apr/include/apr-1
 
 3). -lapr-1
  gcc -o test test.c -D_LARGEFILE64_SOURCE -I/usr/local/apr/include/apr-1 -L/usr/local/apr/lib -lapr-1
全部编译选项
-g -O2 -pthread -luuid -lrt -lcrypt -lpthread -ldl -L/usr/local/apr/lib -lapr-1
阅读(5006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~