C 我能';t编译mongoose web服务器的代码';s示例
简短介绍:-(GCC版本4.6.3,操作系统Ubuntu 12.04,使用mongoose web服务器程序,因此当我运行“make”命令编译和安装mongoose时,它已经很好地完成了任务) [问题的第一部分] 这个问题与stackowerflow上的这篇文章有关 Valenok在这篇文章中给出了hello示例程序的链接 基本上,我正在尝试编译此链接中给出的示例hello程序代码:- 并将此代码放入已编译的mongoose目录中。(目录中有mongoose.h文件) 下面是我编译hello程序的命令行输出C 我能';t编译mongoose web服务器的代码';s示例,c,linux,mongoose-web-server,C,Linux,Mongoose Web Server,简短介绍:-(GCC版本4.6.3,操作系统Ubuntu 12.04,使用mongoose web服务器程序,因此当我运行“make”命令编译和安装mongoose时,它已经很好地完成了任务) [问题的第一部分] 这个问题与stackowerflow上的这篇文章有关 Valenok在这篇文章中给出了hello示例程序的链接 基本上,我正在尝试编译此链接中给出的示例hello程序代码:- 并将此代码放入已编译的mongoose目录中。(目录中有mongoose.h文件) 下面是我编译hello
akshay@akshay-Inspiron-N5010:~$ gcc mongoose/hello.c -o mongoose/hello
/tmp/ccroC5Z6.o: In function `callback':
hello.c:(.text+0x32): undefined reference to `mg_get_request_info'
hello.c:(.text+0x96): undefined reference to `mg_printf'
/tmp/ccroC5Z6.o: In function `main':
hello.c:(.text+0xee): undefined reference to `mg_start'
hello.c:(.text+0x103): undefined reference to `mg_stop'
collect2: ld returned 1 exit status
akshay@akshay-Inspiron-N5010:~$
[问题第二部分]
现在,我在mongoose.c文件中找到了mg_stop、mg_start、mg_printf和mg_get_request_info的实现,因此我使用-c选项编译mongoose.c文件,如下所示:
gcc-c-o猫鼬.o猫鼬.c
我想我的问题类似于:-
但当我在gcc上使用-L选项链接libmongoose.so时,我会出现以下错误:-
(libmongoose.so位于同一目录my cwd中)
此外,在不使用libmongoose.so进行编译时,仍会出现上述^^错误
[编辑]:在gcc上添加了-pthread选项,仍然显示错误:-
mongoose.o:在函数load_dll'中:
mongoose.c:(.text+0xa955):对
dlopen'的未定义引用
mongoose.c:(.text+0xa9b4):对“dlsym”的未定义引用
collect2:ld返回了1个退出状态
对于我问题的第1部分和第2部分:我希望消除这些错误并成功地运行hello.c程序示例。
提前感谢。选项
-L
不用于链接库,而是用于指定动态库的搜索路径。要针对特定库进行链接,请使用-l
。但是,您不需要同时针对mongoose.o
和libmongoose.o进行链接。因此
,任何一个都足够了
在Linux上,您还必须链接pthread和动态加载库,因为尽管它们是C标准库的一部分,但它们在libc.so
中并不存在。需要注意的另一点是,binutils的最新版本(特别是ld
)要求按照符号相互依赖的顺序指定库和对象文件,即。E库必须转到命令行的末尾
总之,请使用以下命令之一:
gcc -o hello hello.o mongoose.o -ldl -lpthread
或
-L
选项不用于链接库,而是用于指定动态库的搜索路径。要针对特定库进行链接,请使用-l
。但是,您不需要同时针对mongoose.o
和libmongoose.o进行链接。因此
,任何一个都足够了
在Linux上,您还必须链接pthread和动态加载库,因为尽管它们是C标准库的一部分,但它们在libc.so
中并不存在。需要注意的另一点是,binutils的最新版本(特别是ld
)要求按照符号相互依赖的顺序指定库和对象文件,即。E库必须转到命令行的末尾
总之,请使用以下命令之一:
gcc -o hello hello.o mongoose.o -ldl -lpthread
或
@非常感谢!您提到的第一个命令可以正常工作。但对于第二个命令,在我运行它时发生了以下错误。/hello:-“加载共享库时出错:libmongoose.so:无法打开共享对象文件:没有这样的文件或目录”“@AkshayPatil是的,这就是它的工作原理。请仔细阅读动态加载。@H2CO3非常感谢!您提到的第一个命令可以正常工作。但对于第二个命令,在我运行它时发生了以下错误。/hello:-“加载共享库时出错:libmongoose.so:无法打开共享对象文件:没有这样的文件或目录”“@AkshayPatil是的,这就是它的工作原理。请阅读动态加载的相关内容。
gcc -L. -o hello hello.o -lmongoose -ldl -lpthread