c - mongoc_init undefined reference

标签 c mongodb makefile

我正在尝试在 Trivia 服务器程序中使用 mongo C 驱动程序,我正在使用它来跟踪登录信息分数等。

我花了相当多的时间来弄清楚如何在 makefile 中编译这些内容,但我能够包含 mongoc.h,所以像 mongoc_client 这样的东西工作得很好。一旦我尝试实际使用一个函数,例如 mongoc_init 我就会得到

> undefined reference to `mongoc_init'  

我觉得应该链接一些东西,因为 mongoc.h 包含所有其他头文件,并且看起来它链接正确。这是我的 makefile - 我不知道该怎么做,甚至不知道要提供什么信息来解决这个问题。

client:
    make -f makefile.client

server:
    make -f makefile.server

clean:
    rm -f *~ *.o tserve core tclient core *.tar *.zip *.gzip *.bzip *.gz  

^ 生成文件

C = gcc
CFLAGS = -g -Wall
LDFLAGS = -lpthread
INFO = -L/usr/local/lib -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0 -lmongoc-1.0 -lbson-1.0

all: tserve

csapp.o: csapp.c csapp.h
        $(CC) $(CFLAGS) -c csapp.c

tserve.o: tserve.c readq.h csapp.h
        $(CC) $(CFLAGS) -c tserve.c $(INFO)

readq.o: readq.c readq.h csapp.h
        $(CC) $(CFLAGS) -c readq.c

tserve: tserve.o readq.o csapp.o

^ makefile.server

C = gcc
CFLAGS = -g -Wall
LDFLAGS = -lpthread

all: tclient

csapp.o: csapp.c csapp.h
        $(CC) $(CFLAGS) -c csapp.c

tclient.o: tclient.c csapp.h
        $(CC) $(CFLAGS) -c tclient.c

tclient: tclient.o csapp.o

^ makefile.client

如果值得注意 - 系统有问题是否使用以下代码安装了驱动程序

system("wget https://github.com/mongodb/mongo-c-driver/releases/download/1.0.2/mongo-c-driver-1.0.2.tar.gz");
system("tar -xzf mongo-c-driver-1.0.2.tar.gz");
system("rm mongo-c-driver-1.0.2.tar.gz");
if (chdir("mongo-c-driver-1.0.2"))
    perror("error:");
system("./configure --prefix=/usr --libdir=/usr/lib64");
system("make");
system("sudo make install");

代码也在 https://www.github.com/decix/TriviaServer

最佳答案

the following file is expected to be named Makefile.mak


# note: with very minor changes this should work for most C projects
#       irregardless of the OS being used

SHELL := /bin/sh

.PHONY: all clean

#
# macro for all *.c files
# (NOTE:
# (the following 'wildcard' will pick up ALL .c files
# (like FileHeader.c and FunctionHeader.c
# (which should not be part of the build
# (so be sure no unwanted .c files in directory
# (or change the extension
#
SRC := $(wildcard *.c)
OBJ := $(SRC:.c=.o)
DEP := $(SRC:.c=.d)
INC := $(SRC:.c=.h)


CC       := /usr/bin/gcc
MAKE     := /usr/bin/make


name := tserve

CFLAGS := -c -g -std=c11 -Wall -Wextra -pedantic-errors
#CPPFLAGS += =MD

# when #(DEBUG) is used in the compile/link steps,
# them max info for the gdb debugger is generated
DEBUG   := -ggdb3
LDFLAGS := -L/lib -L/usr/lib -L/usr/local/lib

LIBS :=  -lpthread -lmongoc-1.0 -lbson-1.0

INC := -I/usr/local/include/libmongoc-1.0 -I/usr/local/include/libbson-1.0
name := tserve

all: $(name)


#
# link the .o files into the executable
# using the linker flags
# -- explicit rule
#
$(name): $(OBJ)
    #
    # ======= $(name) Link Start =========
    $(CC) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
    # ======= $(name) Link Done ==========
    #

#
#create dependancy files
# -- inference rule
#
%.d: %.c Makefile.mak
    #
    # ========= START $< TO $@ =========
    $(CC) -M $(CPPFLAGS) $< > $@.$$$$;                      \
    sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@;     \
    rm -f $@.$$$$
    # ========= END $< TO $@ =========

#
# compile the .c file into .o files using the compiler flags
# -- inference rule
#
%.o: %.c %.d
    #
    # ========= START $< TO $@ =========
    $(CC) $(CCFLAGS) -c $< -o $@ -I. $(INC)
    # ========= END $< TO $@ =========
    #


clean:
    # ========== CLEANING UP ==========
    rm -f *.o
    rm -f $(name).map
    rm -f $(name)
    rm -f *.d
    # ========== DONE ==========


ifneq "$(MAKECMDGOALS)" "clean"
-include $(DEP)
endif

关于c - mongoc_init undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28155868/

相关文章:

node.js - Mongoose pre.save() 异步中间件未按预期工作

python - undefined symbol : PyArray_API when using numpy and swig

c - Valgrind 检测到可到达的泄漏,它们在哪里?

mongodb - 如何在 MongoDB 中执行基于值的 Order By?

创建一个带有内置静态库的exe文件

variables - 如何更改 makefile 变量文件扩展名?

python - 如何使用 scons 构建任意食谱?

c - 在 Windows 上编译 Felzenszwalb VOC 时出现 Matlab Mex32 链接错误

选择 autoconf 和 automake 版本

java - 在 MongoDB 3.2 中创建索引以避免重复的文档/行