首页 新闻 会员 周边

关于开源项目resiprocate的跨平台编译

0
悬赏园豆:10 [已解决问题] 解决于 2013-08-15 14:19

现在项目组在windows下做视频监控,用到开源协议栈resiprocate,resiprocate是一个跨平台的协议栈,但是resiprocate代码中的B2BUA部分的代码在windows中编译不通过,尝试了好几天感觉好多东西都是linux下才有的,好多的头文件都是直接引的linux中的,自己尝试用windows中的头文件去替代,但是出现好多错误,现在有点无从下手的感觉,希望有跨平台编译经验的大侠给予指导。

将军_邓的主页 将军_邓 | 初学一级 | 园豆:193
提问于:2013-08-14 20:28
< >
分享
最佳答案
2

引用了哪些 linux 的头文件?

收获园豆:10
Launcher | 高人七级 |园豆:45045 | 2013-08-15 09:26

<syslog.h>

#include <sys/socket.h>
#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/uio.h>
#include <sys/un.h>
#include <netdb.h>
#include <poll.h>
#include <unistd.h>

还有一些,一时找不全,现在我将这些头文件替换为windows下的#include <winsock2.h>和#include <windows.h>后可以编译,但是另一个非常棘手的问题是,在B2BUA部分引用了xerces和pcre这两个开源的库代码,我从网上下载源码并将相关的头文件引入vs2010的项目下,出现了N多的错误,基本都是关于这两个开源代码库的,xerces的源代码中混合了.c、.cpp文件格式,而pcre这个代码库则是纯.c文件的,纠结了好几天了,修改一处之后马上出现别的编译错误,不知您是否有好的建议?

将军_邓 | 园豆:193 (初学一级) | 2013-08-15 09:53

@将军_邓: 如果是连接 dll 或 lib 的话,你可以分别编译 xerces 和 pcre,然后再用。混合 c,cpp 的项目,最好全都不要使用预编译头,当然,你也可以为 c 单独设置不使用。

如果是引用代码的话,最好还是最小化编译,即先编译成 dll,编译通过后,再引入到你的 resiprocate 去编译。

https://svn.resiprocate.org/viewsvn/resiprocate/main/VisualStudioReadme.htm?view=log

Launcher | 园豆:45045 (高人七级) | 2013-08-15 10:05

@Launcher: 并不是连接dll或lib,而是直接引的头文件,这就是让我头疼的地方,对编译好的dll使用不太熟悉,弱弱的问下,编译成dll后,引入头文件的方式和原来的一样吗?

将军_邓 | 园豆:193 (初学一级) | 2013-08-15 10:51

@将军_邓: 引入头文件的话,.c/.cpp 文件是需要跟随你的项目一同编译的;如果先编译成 dll或lib,你可以通过vs 2010 的添加引用的方式来更简单的引用dll或静态lib。

你可以建立三个项目:resiprocate,xerces(win32 dll或static lib),pcre(win32 dll或static lib)。

然后在 resiprocate 项目上单机右键,选择“引用”,然后把 xerces和 pcre 添加进来。

这样你就可以只引用 xerces 和 pcre 的头文件来编译你的 resiprocate 项目。

Launcher | 园豆:45045 (高人七级) | 2013-08-15 11:02

@Launcher: 好的,谢谢您的耐心帮助,再请教一下,在B2BUA中,由于引入的一些头文件是linux下的,在有些地方使用的变量或者结构体的定义也是linux的,虽然我修改引入头文件可以编译,但是报了好多关于变量定义方面的错误,这个有没有好的解决方案?

     还有一个问题,我对于开源项目的学习没有什么经验,感觉在学习时把握不到重点,不知您有没有什么好的建议?

将军_邓 | 园豆:193 (初学一级) | 2013-08-15 13:23

@将军_邓: 你提到的第一个问题会比较麻烦,你需要读懂源码后按照 Windows 的体系来修改语句,不只是结构体定义。通常跨平台编译的程序都不会依赖特定平台,或者提供不同的编译选项来在不同平台编译。

你应该认证读下项目的问题,通常他们已经考虑到跨平台编译的问题。

没什么好的建议,学习的重点是把握程序的整体结构,不必拘泥于个别语句。

Launcher | 园豆:45045 (高人七级) | 2013-08-15 13:29

@Launcher: 应该是项目自身的问题,resiprocate工程下的其他部分代码都有考虑到跨平台编译,预编译的处理语句很完善,也有建立好的windows下的vs工程,但是B2BUA部分的代码没有关于跨平台的预编译处理,也没有建立相应的windows工程。

      谢谢您的指导,即将面临找工作,大侠,对于大公司和小企业的选择,您的看法是怎样的呢?

将军_邓 | 园豆:193 (初学一级) | 2013-08-15 14:05

@将军_邓: 先考虑钱多的。

Launcher | 园豆:45045 (高人七级) | 2013-08-15 14:10

@Launcher: O(∩_∩)O哈哈~,我会的

将军_邓 | 园豆:193 (初学一级) | 2013-08-15 14:18
其他回答(1)
0

兄弟。现在编译recon到时很容易了。。不过我搞了几天 recon b2bua的功能还没有跑通。。能指导一下吗?

游荡的灵魂 | 园豆:207 (菜鸟二级) | 2013-12-31 11:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册