关于mongoose由http转换成https在Linux下笔记编译链接库问题(3)

我们在编译mongoose6.4的时候发现要调用一些OpenSSL的库。这里编译的时候不知道怎么添加链接,后来想起在makefile的时候能做到。

普及一下linux下c编译的问题,


链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。



make还会在下面的几个目录下找:

1、如果make执行时,有“-l”或“--include-dir”参数,那么make就会在这个参数所指定的目录下去寻找。
2、如果目录/include(一般是:/usr/local/bin或/usr/include)存在的话,make也会去找。

-include
其表示,无论include过程中出现什么错误,都不要报错继续执行。和其它版本make兼容的相关命令是sinclude,其作用和这一个是一样的。



makefile中的环境变量

因此,如果我们在环境变量中设置了“CFLAGS”环境变量,那么我们就可以在所有的Makefile中使用这个变量了。这对于我们使用统一的编译参数有比较大的好处。如果Makefile中定义了CFLAGS,那么则会使用Makefile中的这个变量,如果没有定义则使用系统环境变量的值,一个共性和个性的统一,很像“全局变量”和“局部变量”的特性

关于makefile的见这里http://blog.sina.com.cn/s/blog_61c485330102uxe4.html


回头说编译问题,

我们在makefile里边加上

LDFLAGS += -flg  -lssl
LDFLAGS += -L/usr/local/bin -lcrypto
编译通过。

分析:

例如在makefile中有
1.LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib
则$(LDFLAGS)就相当于-L/var/xxx/lib -L/opt/mysql/lib
2.LDFLAGS告诉链接器ld从哪里寻找库文件

我们在没有加-lssl 这句话的意思是指向-L SSL的库如下图,出现ld  说明需要在makefile里添加-lssl的库 

QQ截图20161125172928.png

当编译发现编译提示-lcrypto 无法链接,缺少 crypto 库

再添加链接

crypto 库





最新评论

  1. gqx
    发布于:2018-11-20 21:43 回复
    当编译发现编译提示-lcrypto 无法链接,缺少 crypto 库的时候该怎么办?求指教
    1. 发布于:2018-12-04 10:18 回复
      @gqx:sudo apt-get install crypto

sitemap