使用libsrtp编译星号时出错

时间:2012-09-27 06:53:35

标签: c++ compiler-errors asterisk

我想用SRTP库编译星号,但在配置星号代码时,我收到此错误:

checking for the ability of -lsrtp to be linked in a shared object... no
configure: WARNING: ***
configure: WARNING: *** libsrtp could not be linked as a shared object.
configure: WARNING: *** Try compiling libsrtp manually. Configure libsrtp
configure: WARNING: *** with ./configure CFLAGS=-fPIC --prefix=/usr
configure: WARNING: *** replacing /usr with the prefix of your choice.
configure: WARNING: *** After re-installing libsrtp
configure: WARNING: *** configure script.
configure: WARNING: ***
configure: WARNING: *** If you do not need SRTP support re-run configure
configure: WARNING: *** with the --without-srtp option.

这也是检查此规则的代码:

if test "$PBX_SRTP" = "1";

then

    saved_libs="${LIBS}"
    saved_ldflags="${LDFLAGS}"
    LIBS="${LIBS} -lsrtp"
    LDFLAGS="${LDFLAGS} -shared -fPIC"
    AC_MSG_CHECKING(for the ability of -lsrtp to be linked in a shared object)
    AC_LINK_IFELSE(
    [
        AC_LANG_PROGRAM(
            [#include <srtp/srtp.h>],
            [srtp_init();]
        )
    ],

    [ AC_MSG_RESULT(yes) ],
    [
        AC_MSG_RESULT(no)
        AC_MSG_NOTICE(***)
        AC_MSG_NOTICE(*** libsrtp could not be linked as a shared object)
        AC_MSG_NOTICE(*** try compiling libsrtp manually and configuring with)
        AC_MSG_NOTICE(*** ./configure CFLAGS=-fPIC --prefix=/usr)
        AC_MSG_NOTICE(*** replacing /usr with the prefix of your choice)
        exit 1
    ]
    )
    LIBS="${saved_libs}"
    LDFLAGS="${saved_ldflags}"
fi

提交详情:https://reviewboard.asterisk.org/r/857/diff/

我尝试了几个用于编译libsrtp代码的前缀,但是得到了相同的结果。 有什么建议吗?

3 个答案:

答案 0 :(得分:6)

警告说它无法与libsrtp链接,因为libsrtp的代码需要可重定位,就像共享库一样,似乎你正在将libsrtp编译为静态库,I按照它的建议去做,并使用:

重建 libsrtp
./configure CFLAGS=-fPIC

我也尝试过这个并且它有效,请注意我在构建libsrtp时使用了默认前缀/ use / local / lib

./configure --with-srtp=/usr/local/lib
checking for srtp_init in -lsrtp... yes
checking srtp/srtp.h usability... yes
checking srtp/srtp.h presence... yes
checking for srtp/srtp.h... yes
checking for the ability of -lsrtp to be linked in a shared object... yes

答案 1 :(得分:6)

SRTP文件夹中的

make uninstall
make clean
./configure CFLAGS=-fPIC --prefix=/usr/local/lib
make
make runtest
make install

在Asterisk文件夹中:

 cd ../../asterisk/asterisk-11.3.0/
./configure --with-srtp=/usr/local/lib

这对我有用

答案 2 :(得分:1)

构建脚本检查是否可以编译srtp_init()进行简单调用,为了使其有效,您应该在包含文件的路径中创建一个包含<srtp>的文件夹并创建{{1}链接器路径中的库。因此,在创建.a后,将您的前缀放在链接器路径