免费注册 查看新帖 |

Chinaunix

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

[C] 两个第三方库的pid_t定义冲突 [复制链接]

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-16 14:42 |只看该作者 |倒序浏览
我在windows上编译Python(3.3)的C扩展库的时候,C扩展库里依赖了ACE(5.4.4)的库,出现了error

ACE_INSTALLPATH\ace\os_include\sys\os_types
.h(161) : error C2371: 'pid_t' : redefinition; different basic types
        PYTHON_INSTALLPATH\include\pyconfig.h(209) : see declaration of 'pid_t'

ACE的os_types.h里边定义的pid_t
typedef long pid_t;

Python的pyconfig.h里边定义的pid_t
typedef int pid_t:

Python和ACE都是第三方的,没办法去修改,这个时候有没有办法绕过去?

网上查了下资料,这个是ACE本身的一个bug,但是现在更换ACE的版本是不太现实的,代价比较大。
bug #3190 http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=3190

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
2 [报告]
发表于 2014-10-16 15:07 |只看该作者
将它分开编译成二进制后再引用噬~~

论坛徽章:
1
NBA常规赛纪念章
日期:2015-05-04 22:32:03
3 [报告]
发表于 2014-10-16 15:36 |只看该作者
这块的knowledge不够,没能很好的理解你的意思。
首先是我在代码里用的
include "Python.h"
makefile里
UTILS_LIB = $(LOG4CXX_LIB) $(ACE_LIB) $(ICU_LIB)


你的意思是把ACE和Python编译成二进制文件?

首先,ACE有动态链接库,这个好办,但是python怎么编译成二进制文件?

其次,编译成二进制文件后又改如何引用呢?


回复 2# folklore


   

论坛徽章:
0
4 [报告]
发表于 2014-10-17 19:31 |只看该作者
本帖最后由 fengidri 于 2014-10-17 19:31 编辑

首先你编译的Python(3.3)的C扩展库, 编译时必然要引用libpython或python.dll

把你的代码代码分成两部份A(python 部分) B(ACE部份), 编译A 时要引用B的头文件, 这 头文件中要不包含ACE。
同理编译B时引用A的头文件也不能包含python.    也是就说A对于python  的引用控制好不要影响到对外的接口。B也一样。

生成两个库再合起来。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP