0
我正在为开源的PBX kamailio开发一个模块。我试图将我的C代码编译成共享对象文件。该代码依赖于Kamailio中的其他共享对象,因此我需要将它们链接起来,否则kamailio将无法加载模块而不会出错。Make File Linking问题
这里是我的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/
正如你可以看到我包括在化妆的库:
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?
你需要'你需要链接到库-l'参数。你似乎没有很多。你需要更多吗?这就是说我不希望一个软件模块需要与应用程序本身的库链接。 –