默认下载下来freeswitch后,按照readme.md执行编译过,其实它下面有一个esl例子目录.../freeswitch/libs/esl/的内容不一定被编译到,需要进入这个子目录make一下,不过不幸的是,经常容易出错,例如下图就是常见的编译错误:
头文件没有找到,第一反应就是修改include目录,哪里改呢,就是Makefile文件,具体修改后面给出截图,然后第二个错误如下图
出错内容看,是testclient.c(笔者自己已经对testclient.c做了很多改写)里调用到了一些函数,例如switch_hash_core_delete没有找到对应的库文件(里面有这些函数的定义),那么首先想到的就是makefile里的ldflags之类的链接器选项不对,漏掉了相应的库文件定义,分两步走:
1. 首先要找到这些符号(函数)在哪里定义的,以switch_core_hash_delete为例,我们找到它的定义文件在../freeswitch/src/下面的switch_core_hash.c,这个目录下的文件位于顶层文件夹src下面,它们一般都被编译成(和其他子目录编译成的库)根目录下的总的库文件(mac下是.dylib文件),那么我们遵循这个思路找到../freeswitch/src/.libs/下面的libfreeswitch.dylib, 接下来用nm命令查看库文件里定义的符号 nm -g libfreeswitch.dylib, 找到了缺失的那些符号的定义。
2. 修改makefile,添加相应的的库文件到链接器的链接选项里,打开libs/esl/Makefilen文件,修改如下:
上面修改了两行,第一行就是第一个错误:找不到libteletone.h文件,第二行是针对第二个错误,修改完成,保存,编译成功
接下来尝试跑一下testserver.c,通常情况下,你会碰到‘connection refused‘的错误,这个错误,经过上网搜索,原因是:
tcp链接不能通过localhost而是要真是的ip地址譬如172.20.10.3这样的,就是说数据要经过实际网卡,具体原因网上有讲到这里就不再赘述了