Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';我不知道在添加Mongoose Embedded之后如何构建C应用程序_C_Makefile_Mongoose Web Server - Fatal编程技术网

Can';我不知道在添加Mongoose Embedded之后如何构建C应用程序

Can';我不知道在添加Mongoose Embedded之后如何构建C应用程序,c,makefile,mongoose-web-server,C,Makefile,Mongoose Web Server,我对C开发相当陌生,尤其是makefiles,所以请耐心听我说。我有一个功能强大的C应用程序,它可以很好地使用Makefile构建,但我希望它能够响应http请求。因此,猫鼬 在功能上,Makefile调用: g++ -pthread -I./ -I../../dmx/include -I/usr/include/glib-2.0 -I/usr/include/gtk-3.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/inclu

我对C开发相当陌生,尤其是makefiles,所以请耐心听我说。我有一个功能强大的C应用程序,它可以很好地使用Makefile构建,但我希望它能够响应http请求。因此,猫鼬

在功能上,Makefile调用:

g++ -pthread -I./ -I../../dmx/include -I/usr/include/glib-2.0 -I/usr/include/gtk-3.0 -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I/usr/include/pango-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/atk-1.0  -g -c DMXController.c -o DMXController.o -Wno-deprecated-declarations
g++ -o DMXController.bin DMXController.o -lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lglib-2.0 -lusb -lm -L../../dmx/lib -ldmx -L. -ldl -lpthread  -Wl,--no-whole-archive -rdynamic
rm DMXController.o 
这在没有任何Mongoose函数调用的情况下都可以正常工作,但在我添加一个函数时就会中断。我将mongoose.c和mongoose.h文件复制到直接的父目录中,并添加了
#include“mongoose.h”
,但我不确定如何将依赖项添加到Makefile中

Mongoose文档说要使用
cc app.c Mongoose.c-pthread-o app
的形式构建,但是如何将其与我已经拥有的结合起来呢

如果使用mongoose函数调用在应用程序代码上运行现有Makefile,编译错误为:
未定义对“mg_create_server”(或我可能使用的任何其他mongoose函数)的引用

下面是应用程序代码的相关部分

#include <gtk/gtk.h>                        // GTK+3.0 graphics library
#include <dmx.h>                            // DMX interface library
#include "mongoose.h"                       // Mongoose Web server

// ...

int main( int argc, char *argv[] )
{
    // initialize mg
    struct mg_server *server = mg_create_server(NULL, NULL); // undefined reference
    mg_set_option(server, "document_root", ".");      // undefined reference
    mg_set_option(server, "listening_port", "8080");  // undefined reference

    // initialize DMX
    int error;
    error = initDMX(); // local function that works fine
    if ( error < 0 ) return ( error );

    // do stuff 
    for (;;) {
            mg_poll_server(server, 1000);   // undefined reference
    }

    // kill mg
    mg_destroy_server(&server); // undefined reference

    // kill DMX
    exitDMX(); // local function that works fine

    // die quietly
    return ( 0 );
}
#包括//GTK+3.0图形库
#包括//DMX接口库
#包括“mongoose.h”//mongoose Web服务器
// ...
int main(int argc,char*argv[])
{
//初始化mg
struct mg_server*server=mg_create_server(NULL,NULL);//未定义的引用
mg_set_选项(服务器,“document_root”,“);//未定义的引用
mg_设置_选项(服务器,“侦听_端口”,“8080”);//未定义的引用
//初始化DMX
整数误差;
error=initDMX();//工作正常的本地函数
如果(错误<0)返回(错误);
//做事
对于(;;){
mg_poll_server(server,1000);//未定义的引用
}
//杀镁
mg_destroy_server(&server);//未定义的引用
//杀死DMX
exitDMX();//工作正常的本地函数
//静静地死去
返回(0);
}
Makefile的内容:(目前…我一直在尝试各种方法)

CC=g++
CFLAGS+=-pthread
LDFLAGS+=-lgtk-3-lgdk-3-latk-1.0-lgio-2.0-LPANGOCARO-1.0\
-lgdk_pixbuf-2.0-lcairo gobject-lpango-1.0-lcairo\
-lgobject-2.0-lglib-2.0-lusb-lm\
-L.././dmx/lib-ldmx-L.#-lmongoose-ldl-lpthread
包括+=-I.-I.././dmx/include\
-I/usr/include/glib-2.0-I/usr/include/gtk-3.0\
-I/usr/lib/arm-linux-gnueabihf/glib-2.0/include\
-I/usr/include/pango-1.0-I/usr/include/cairo\
-I/usr/include/pixman-1-I/usr/include/gdk-pixbuf-2.0\
-I/usr/include/atk-1.0
OBJS=DMXController.o
BIN=DMXController.BIN
全部:$(BIN)
%.o:%.c
@rm-f$@
$(CC)$(CFLAGS)$(包括)-g-c$<-o$@-Wno不推荐的声明
%.bin:$(OBJS)
$(CC)-o$@$(OBJS)$(LDFLAGS)-Wl,--没有整个归档文件-rdynamic
@cp$@../bin
清洁:
对于i,单位为美元(OBJS);do(如果测试-e“$$i”;那么(rm$$i);fi);完成
@rm-f$(银行标识代码)

谢谢你的帮助

一个简单的解决方案是添加到Makefile中:

LDFLAGS+=../mongoose.c

这将构建mongoose并将其与应用程序链接起来

这看起来有点奇怪:-L.-ldl-lpthread表示下一个库(libdl.so和libpthread.so)将在当前目录中找到。这看起来有点奇怪:-I./-I.././dmx/include通常本地目录列为-I。并且您无法确保dmx目录始终位于当前目录之上的2个目录。所以使用绝对路径。两个关键问题:1)mongoose.h文件位于哪里?2) 关联的库位于何处?这些问题的答案将告诉您makefilenote中需要更改的内容:-I和-L必须始终以目录名结尾。(.和..)是相对目录名,因此-I.适用于当前目录for-l(小写“l”)。如果库位于标准位置,则不需要前面的'-l'参数,否则必须使用包含库路径的前面的'-l'参数。酷。这很有效。但是为了学习机会,为什么它会起作用呢?这面旗子实际上是做什么的?我似乎找不到关于基本标志(-c-L-L等)的有用参考。-c构建一个对象文件,-L链接一个库,-L给出搜索库的路径。如果您想将mongoose与-lmongoose一起使用,您应该构建这个库,例如使用ar
LDFLAGS+=../mongoose.c