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
阅读(4999) | 评论(0) | 转发(0) |