关于mongoose由http转换成https在Linux下笔记编译链接库问题(3)
我们在编译mongoose6.4的时候发现要调用一些OpenSSL的库。这里编译的时候不知道怎么添加链接,后来想起在makefile的时候能做到。
普及一下linux下c编译的问题,
链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
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的库
当编译发现编译提示-lcrypto 无法链接,缺少 crypto 库
再添加链接
crypto 库
。
最新评论