我正在开发一个开源PBX的kamailio模块。我正在尝试将我的c代码编译成共享对象文件。代码依赖于Kamailio中的其他共享对象,因此我需要链接它们,否则kamailio将不会加载模块而不会出错。
这是我的Makefile:
include ../../Makefile.defs
auto_gen=
NAME=libproto.so
CC=gcc
CFLAGS= -g -Wall -fPIC -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/ -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/linux -I/usr/local/lib64/kamailio/
LDFLAGS=-shared
LIBS= -L'$(LD_LIBRARY_PATH)' -ljvm -L/usr/local/src/kamailio-4.3/kamailio/modules/kam_module_elogj -L/usr/local/lib64/kamailio/
DEFS+=-DKAMAILIO_MOD_INTERFACE
include ../../Makefile.modules
SOURCE=jni_wrapper.c ProtoType.c
OBJECTS=$(SOURCE:.c=.o)
all: $(SOURCE) $(NAME)
%.o: %.c
$(CC) $(CFLAGS) -c $(LIBS) $<
clean:
rm -f $(EXEC); rm -f *~; rm -f .*.swp; rm -f .*.swo; rm -f *.o
java:
javac ProtoType.java
jar cf ProtoType.jar ProtoType.class
javap -s -p ProtoType > sigs.txt
cat sigs.txt
从属文件所在的目录/usr/local/lib64/kamailio/
如您所见,我在make中包含了库:
CFLAGS= -g -Wall -fPIC -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/ -I/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/include/linux -I/usr/local/lib64/kamailio/
不幸的是,这仍未与我的共享对象文件链接。因此,当kamailio加载模块时,它会抱怨未定义的符号。
有没有人发现我的Makefile有什么问题?
答案 0 :(得分:0)
如果需要链接Kamailio的内部库,则应使用makefile变量SERLIBPATH和SER_LIBS来实现。例如,查看alias_db模块的makefile,它需要连接到数据库,因此链接到srdb1库(abstract db api) - 相关代码片段:
<script src="http://code.jquery.com/jquery-1.11.3.js"></script>
Selected item color: <input type="color" id="designer-javascript-color" />
<br>
Selected item background color:<input type="color" id="designer-javascript-backcolor" />
<br/>
<div id="changeMe" style='color:white;background-color: blue'>
click here</div>
安装kamailio后,您不能将模块链接到kamailio内部库。