编译thrift外篇-关于默认链接包-(使用mapkeeper运行leveldb成功)
2017-08-25 20:07
260 查看
根据 https://stackoverflow.com/questions/9922949/how-to-print-the-ldlinker-search-path 使用
ll /usr/local/cuda-8.0/lib64 /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/nvidia-375 /usr/lib32/nvidia-375 /lib32 /usr/lib32 /lib /usr/lib |grep
snappy
可以看到有snappy库。 查看leveldb时,有两个leveldb库,一个是apt-get安装的,一个是自己编译拷贝进去的,两个不一样大。现在想知道apt-get安装的路径在哪。
使用
/usr/lib/x86_64-linux-gnu/libsnappy.a
/usr/local/lib/libleveldb.a
leveldb路径
第一个是系统安装的。
通过fincore可知,链接的是/usr/local/lib/libleveldb.a ,也就是自己编译的。
最后,在Makefile里加上一句 LIB=/usr/lib/x86_64-linux-gnu/
以及 -L $(LIB)
竟然编译成功了!!!!
根据 http://blog.csdn.net/szyjsj/article/details/69567757 运行, ./mapkeeper_leveldb -d ./data
(1)端口是9090
(2)加了 -L $(LIB) 对于leveldb仍然链接的是/usr/local/lib/libleveldb.a
--修正,无法知道链接的是哪一个,似乎是apt-get安装的, remove以后编译就不成功了,即使在 -llibleveldb前加上 -L /usr/local/lib/ 也不行
然后重新apt-get install,编译成功了,但是清楚缓存后再编译,fincore发现两个地方的leveldb.a 都不在缓存中。
remove掉,或者重命名,将 -L /usr/local/lib -lleveldb 放在前面,编译成功。
于是,可以使用自己的 libleveldb.a 编译了。
(3)将 /usr/local/include/leveldb删除掉无法编译成功,提示头文件不存在。
(4) 运行 ./mapkeeper_leveldb -d ./data 后会打开 /usr/lib/x86_64-linux-gnu/libleveldb.so.1.18
这说明 so文件是运行时必须的。
后来又发现其实so文件并不需要,对其改名, ./mapkeeper_leveldb -d ./data 照样运行成功。
-rw-r--r-- 1 root root 816238 Nov 19 2015 /usr/lib/x86_64-linux-gnu/libleveldb.a.old
lrwxrwxrwx 1 root root 18 Nov 19 2015 /usr/lib/x86_64-linux-gnu/libleveldb.so.1 -> libleveldb.so.1.18
-rw-r--r-- 1 root root 367496 Nov 19 2015 /usr/lib/x86_64-linux-gnu/libleveldb.so.1.18
总结:
首先是要加入 -L /usr/lib/x86_64-linux-gnu/ 去除snappy的错误
要使用自己的libleveldb.a 必须在Makefile中将 -L /usr/local/lib -lleveldb 放在 -L /usr/lib/x86_64-linux-gnu/ -lboost_thread 的前面。
ldconfig -v 2>/dev/null | grep -v ^$'\t'
列出了所有的默认链接包路径,使用
ll /usr/local/cuda-8.0/lib64 /usr/lib/x86_64-linux-gnu/libfakeroot /usr/local/lib /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu /usr/lib/nvidia-375 /usr/lib32/nvidia-375 /lib32 /usr/lib32 /lib /usr/lib |grep
snappy
可以看到有snappy库。 查看leveldb时,有两个leveldb库,一个是apt-get安装的,一个是自己编译拷贝进去的,两个不一样大。现在想知道apt-get安装的路径在哪。
使用
ls -d -1 $PWD/**/* 这种方式以全路径方式列出当前目录下的文件,可以套用到上述路径,发现,snappy路径
/usr/lib/x86_64-linux-gnu/libsnappy.a
/usr/local/lib/libleveldb.a
leveldb路径
第一个是系统安装的。
通过fincore可知,链接的是/usr/local/lib/libleveldb.a ,也就是自己编译的。
最后,在Makefile里加上一句 LIB=/usr/lib/x86_64-linux-gnu/
以及 -L $(LIB)
竟然编译成功了!!!!
根据 http://blog.csdn.net/szyjsj/article/details/69567757 运行, ./mapkeeper_leveldb -d ./data
(1)端口是9090
(2)加了 -L $(LIB) 对于leveldb仍然链接的是/usr/local/lib/libleveldb.a
--修正,无法知道链接的是哪一个,似乎是apt-get安装的, remove以后编译就不成功了,即使在 -llibleveldb前加上 -L /usr/local/lib/ 也不行
然后重新apt-get install,编译成功了,但是清楚缓存后再编译,fincore发现两个地方的leveldb.a 都不在缓存中。
remove掉,或者重命名,将 -L /usr/local/lib -lleveldb 放在前面,编译成功。
于是,可以使用自己的 libleveldb.a 编译了。
(3)将 /usr/local/include/leveldb删除掉无法编译成功,提示头文件不存在。
(4) 运行 ./mapkeeper_leveldb -d ./data 后会打开 /usr/lib/x86_64-linux-gnu/libleveldb.so.1.18
这说明 so文件是运行时必须的。
后来又发现其实so文件并不需要,对其改名, ./mapkeeper_leveldb -d ./data 照样运行成功。
-rw-r--r-- 1 root root 816238 Nov 19 2015 /usr/lib/x86_64-linux-gnu/libleveldb.a.old
lrwxrwxrwx 1 root root 18 Nov 19 2015 /usr/lib/x86_64-linux-gnu/libleveldb.so.1 -> libleveldb.so.1.18
-rw-r--r-- 1 root root 367496 Nov 19 2015 /usr/lib/x86_64-linux-gnu/libleveldb.so.1.18
总结:
首先是要加入 -L /usr/lib/x86_64-linux-gnu/ 去除snappy的错误
要使用自己的libleveldb.a 必须在Makefile中将 -L /usr/local/lib -lleveldb 放在 -L /usr/lib/x86_64-linux-gnu/ -lboost_thread 的前面。
相关文章推荐
- windows游戏开发中一个关于Visual Studio的编译链接成功,输出窗口却显示线程已退出。无法运行项目的问题
- GCC的使用(编译,链接,运行)
- 关于VS Code使用code runner编译运行java出现报错乱码的问题
- C语言——关于编译运行过程以及链接的遐想
- 编译链接运行时使用自己编译的库
- Redhat 7修改默认运行级别方法 --RHEL7使用systemd创建符号链接指向默认运行级别(文字,图形界面)
- Eclipse中编译和运行时使用的JDK和JRE级别问题(关于"Bad version number in .class file"的异常解决)
- 配置ADS,使ADS编译出bin文件,并使用uboot下载运行成功
- 关于使用JCreator编译后无法运行的解决方法
- 关于wince 使用占用空间大的内存变量问题(编译无错误但是无法运行的问题)
- thrift编译java的问题-(安装thrift0.8.0成功-编译mapkeeper.java成功)
- 深度学习(caffe+VS2013+WIN10)使用GPU编译——调用python接口并且成功运行mnist
- 关于Vs 2005 中出现编译通过,但运行时出现“未使用调试信息生成二进制文件”的问题
- [PL/SQL] 关于pl/sql编译报ORA-00934此处不允许使用分组函数 [复制链接]
- 关于OpenCV Gpu模块无法使用Cuda4.2以上版本编译成功的解决方案
- 关于 通过jlink使用jtag(或swd)下载程序成功后,keil4 uversion停止运行 的解决方法
- 关于DirectX高级动画书中使用的9.0bsdk的升级说明 cXParser类(dx9.0c sdk vs2003编译运行通过)
- Redhat 7修改默认运行级别方法 --RHEL7使用systemd创建符号链接指向默认运行级别
- 如何在64位操作系统上使用masm进行编译链接和运行
- 关于命令行中javac 编译成功,用 java 运行 class 文件出现 “ 找不到或无法加载主类 ” 的问题