2016-01-22 105 views
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?

+0

你需要'你需要鏈接到庫-l'參數。你似乎沒有很多。你需要更多嗎?這就是說我不希望一個軟件模塊需要與應用程序本身的庫鏈接。 –

回答

0

如果需要對Kamailio的內部庫鏈接,你應該使用Makefile變量SERLIBPATH和SER_LIBS做到這一點。例如,看alias_db模塊的makefile文件,它需要連接到數據庫,因此對鏈接庫srdb1(摘要DB API) - 相關片段:

SERLIBPATH=../../lib 
SER_LIBS+=$(SERLIBPATH)/srdb1/srdb1 

必須沒有聯繫的模塊kamailio內部安裝kamailio後的庫。