安装GeoIP2以及利用GeoIP2的API开发查询函数 踩过的雷——程序编译链接运行篇
来源:互联网 发布:淘宝好看的小白鞋 编辑:程序博客网 时间:2024/06/18 09:45
接上一篇,忘记把代码贴出来了……一会补上吧。
程序是写好了,但是折腾了好久,首先是"undefined reference to MMDB_open"等等这一系列的用的GeoLite API出现的错误,我本来以为是头文件的问题,但是查了一下linux下头文件的查询顺序是/lib /usr/lib /usr/local/lib 我在/usr/local/lib下其实是有这个需要引用的头文件的,并且我的头文件也在代码里头include了。
但是其实要注意一点 undefined reference是未引用而不是未定义,所以其实不是头文件的问题而是链接库的问题,就是程序在链接的时候找不到这个函数的实现了。我们使用的额外的库是libmaxminddb.so这一系列的,所以在gcc编译的时候加上这个库名就行了,这个库名要把前面的lib去掉并且把后缀.so或者.a去掉,比如说libmaxminddb.so,他的库名就是maxminddb,加上这个库名呢要用-l再无缝隙直接加上库名。为什么其他的不用加上库名只有这个用呢,可能其他是默认的吧啥的,我们这里这个库不是常用库所以要声明一下我们用到了这个库,不然啥库都给你链接上多累啊。
使用示例:
gcc geoip.c -lmaxminddb
geoip.c是我们的代码文件。
之后要声明一下-L 用法,这个就是不在/lib /usr/lib /usr/local/lib下的库的时候,你还想链接上它,就要用这个选项了,-L后面直接无缝加上那个库的路径即可。
再推荐一篇文章吧,这个讲了-l -L还是挺好的,请点击这里。
ok,我们在gcc一下,然后出现了类似于“error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory”这样的错误,我就心想,马格吉,这个我还能用-l指明吗,这个看这跟动态链接库似像非像的。然后自己鼓捣了半天吧,没啥用,上百度搜了一下这个错误,还真有。推荐http://blog.csdn.net/sahusoft/article/details/7388617这篇文章。
这篇文章告诉我们这个是一个共享库文件,我们已经安装了这个共享库文件,但是“已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.”。然后那篇文章说如果安装到了/lib /usr/lib下面的话,使用ldconfig命令即可。
ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
然而大部分是安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
还有另外一种其他的情况,那篇文章也提到了,我也就不赘述了。反正有的时候有错误吧,自己去理解错误的意思是很重要的,但是也要知道学会搜索错误的重要性。
- 安装GeoIP2以及利用GeoIP2的API开发查询函数 踩过的雷——程序编译链接运行篇
- 安装GeoIP2以及利用GeoIP2的API开发查询函数 踩过的雷——C语言API篇
- 安装GeoIP2以及利用GeoIP2的API开发查询函数——代码部分(可运行)
- GeoIP2 精准服务(网络API)
- 根据ip查询地区,经纬度等-geoip2
- 程序的处理步骤——预处理、编译、链接、运行
- 《程序的编译,链接,运行》读书笔记
- 吐槽小程序开发踩过的坑,以及一些解决方法
- 吐槽小程序开发踩过的坑,以及一些解决方法
- 吐槽小程序开发踩过的坑,以及一些解决方法
- eclipse下添加GCC编译器的编译链接库以及程序运行参数方法
- C语言——关于编译运行过程以及链接的遐想
- 程序的编译,链接
- 程序的编译、链接
- 简图记录-程序的生命周期:编译链接装载运行
- 程序的处理步骤-------预处理、编译、链接、运行
- make和makefile以及程序的编译和链接过程
- 【Ogre开发】之一:Ogre sdk的安装以及示例代码的编译和运行
- ubuntu配置shadowsocks
- CodeForces
- HDU-1846-Brave Game 简单【巴什博弈】
- [资源分享]一个类似农药的UNITY分享
- 廖雪峰Python教程阅读笔记——1. Python基础介绍
- 安装GeoIP2以及利用GeoIP2的API开发查询函数 踩过的雷——程序编译链接运行篇
- 【英语】迷途回望-不忘初心
- 23种设计模式
- BZOJ4596 黑暗前的幻想乡 Matrix_Tree定理 容斥原理
- 【矩阵快速幂模板】
- 关于ANR和Force Close
- 背包之01背包、完全背包、多重背包详解
- HDU 6127 Hard challenge(几何)
- Java对浮点型数据保留小数点后n位