On 12/05/2016 04:53 PM, Julian Fleischhauer wrote:
Hey all,
I have a problem using a custom C-file. The error ouput received when
compiling is given below.
error output
.../system.c:1330: undefined reference to `XML_ParserCreate'
...
.../system.c:1465: undefined reference to `sip_get_header'
...
.../system.c:1608: undefined reference to `pcap_lookupnet'
...
Before, I had all code in chan_sip.c. I want to transfer the code into
a separate file (system.c) now. The dependencies given below
MODULEINFO are customly set and worked fine when used in chan_sip.c.
Can anyone figure out if something else has to be added somewhere? The
code is quoted below:
sip.h
const char *sip_get_header(const struct sip_request *req, const char
*name);
system.h
#include "asterisk/netsock2.h"
void ast_some_function(struct sip_pvt *p, struct ast_sockaddr *addr);
system.c
/*** MODULEINFO
<depend>sqlite3</depend>
<depend>expat</depend>
<depend>pcap</depend>
<support_level>extended</support_level>
***/
#include "asterisk/system.h"
#include "asterisk/sip.h"
void ast_some_function(struct sip_pvt *p, struct ast_sockaddr *addr)
{
xmlParser = XML_ParserCreate(NULL);
...
ast_copy_string(touser, sip_get_header(req, "To"),
strlen(sip_get_header(req, "To"))+1);
...
pcap_lookupnet(pcapDev, &netp, &maskp, errbuf);
}
chan_sip.c
#include "asterisk/system.h"
#include "asterisk/sip.h"
ast_some_function(p, addr);
Thank you for any help!
Regards,
Juliannn
I can explain why sip_get_header() is causing a problem. In order for
functions to be callable from other modules, they need to be explicitly
exported. This is why you'll see files like res/res_agi.exports.in,
which define functions that can be called globally from that module. You
have a couple of options here:
* Define a .exports.in file for your system.c file that exports the
sip_get_header() function.
* Change "sip_get_header()" to "ast_sip_get_header()". Assuming that
system.c is in the main/ directory, there is a project-wide exports file
that makes it so any function starting with "ast" can be called externally.
Regarding the XML and pcap issues, the issues are either that
* You're not #including the necessary files.
* The libraries are not being linked during compilation.
The first problem is easy to fix: just #include the right files :). The
second problem is a bit more tricky because you'll need to dig into
Makefiles and try to figure out how libraries get linked when Asterisk
is built.
--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --
asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-dev