Linux下使用开源代码及编译使用动态库
2016-04-20 19:32
295 查看
1.Linux平台上安装OpenCV
请参照http://jingyan.baidu.com/article/14bd256e466474bb6d2612db.html
注意:
1)、编译命令:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
其中没有安装QT和openGL的话后面几项请删除掉,否则会有错误编译命令改为:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON ..
2)、makefile中:
CXX = g++
CFLAGS = -Wall
LDFLAGS =
SRCS = (wildcard∗.cpp)TARGETS=(patsubst %.cpp, %, (SRCS))all:(TARGETS)
(TARGETS):(SRCS)
(CXX)−o@ <(LDFLAGS) (CFLAGS)clean:−rm−rf(TARGETS) *~ .*swp
.PHONY: clean all
LDFLAGS =
http://www.cnblogs.com/leaven/archive/2010/06/11/1756294.html
如果出现这个问题,ld.so.conf加路径了,也ldconfig了,但就是不生效:
http://www.phpfans.net/ask/fansa1/5914707761.html
是因为ld.so是动态库载入器而不是连接器,某些翻译“动态连接器”有问题的,或者说英文原文就有问题换句话说,配置ld.so.conf的作用就是如果so在非标准路径,可执行文件能够找到,这是运行期做的事情你现在是编译,ld.so根本不起作用,所有用非标准路径的话必需手动指定库目录。
所以可以参照LD_LIBRARY_PATH环境变量设置:
http://james23dier.iteye.com/blog/763274
即:如果不想每次新启一个shell都设置LD_LIBRARY_PATH,可以编辑~/.bash_profile文件:
vi /.bashprofile添加:exportLDLIBRARYPATH=.: LD_LIBRARY_PATH
然后运行$ source ~/.bash_profile 就行了。
这样在当前目录下的.so就能被找到了。(不知道什么原因重启后又找不到了,不用此方法)
搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径。像前面提到的 -L/tmp/ 是属于链接时期的搜索路径,即给ld程序提供的编译链接时候寻找动态库路径;而LD_LIBRARY_PATH则既属于链接期搜索路径,又属于运行时期的搜索路径。
这里需要介绍链-rpath链接选项,它是指定运行时候都使用的搜索路径。
参考:http://blog.chinaunix.net/uid-27105712-id-3313327.html
http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html
在编译目标代码时指定该程序的动态库搜索路径。
还可以在编译目标代码时指定程序的动态库搜索路径。通过gcc 的参数”-Wl,-rpath,”指。
简单翻译下, rpath链接选项主要有两个功能:
(1)程序运行时,优先到rpath指定的目录去寻找依赖库
(2)程序链接时,在指定的目录中,隐式的链接那些动态库所需要的链接库。
使用此方法可以找到指定路径下的.so。
输入路径
请参照http://jingyan.baidu.com/article/14bd256e466474bb6d2612db.html
注意:
1)、编译命令:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..
其中没有安装QT和openGL的话后面几项请删除掉,否则会有错误编译命令改为:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON ..
2)、makefile中:
CXX = g++
CFLAGS = -Wall
LDFLAGS =
pkg-config --cflags --libs opencv
SRCS = (wildcard∗.cpp)TARGETS=(patsubst %.cpp, %, (SRCS))all:(TARGETS)
(TARGETS):(SRCS)
(CXX)−o@ <(LDFLAGS) (CFLAGS)clean:−rm−rf(TARGETS) *~ .*swp
.PHONY: clean all
LDFLAGS =
pkg-config --cflags --libs opencv中是这个符号`(键盘左上角),不是这个’,不然会出错。
linux下编译使用动态库 ##
请先参照Linux动态库的编译与使用:http://www.cnblogs.com/leaven/archive/2010/06/11/1756294.html
如果出现这个问题,ld.so.conf加路径了,也ldconfig了,但就是不生效:
http://www.phpfans.net/ask/fansa1/5914707761.html
是因为ld.so是动态库载入器而不是连接器,某些翻译“动态连接器”有问题的,或者说英文原文就有问题换句话说,配置ld.so.conf的作用就是如果so在非标准路径,可执行文件能够找到,这是运行期做的事情你现在是编译,ld.so根本不起作用,所有用非标准路径的话必需手动指定库目录。
所以可以参照LD_LIBRARY_PATH环境变量设置:
http://james23dier.iteye.com/blog/763274
即:如果不想每次新启一个shell都设置LD_LIBRARY_PATH,可以编辑~/.bash_profile文件:
vi /.bashprofile添加:exportLDLIBRARYPATH=.: LD_LIBRARY_PATH
然后运行$ source ~/.bash_profile 就行了。
这样在当前目录下的.so就能被找到了。(不知道什么原因重启后又找不到了,不用此方法)
搜索路径分两种,一种是链接时候的搜索路径,一种是运行时期的搜索路径。像前面提到的 -L/tmp/ 是属于链接时期的搜索路径,即给ld程序提供的编译链接时候寻找动态库路径;而LD_LIBRARY_PATH则既属于链接期搜索路径,又属于运行时期的搜索路径。
这里需要介绍链-rpath链接选项,它是指定运行时候都使用的搜索路径。
参考:http://blog.chinaunix.net/uid-27105712-id-3313327.html
http://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html
在编译目标代码时指定该程序的动态库搜索路径。
还可以在编译目标代码时指定程序的动态库搜索路径。通过gcc 的参数”-Wl,-rpath,”指。
简单翻译下, rpath链接选项主要有两个功能:
(1)程序运行时,优先到rpath指定的目录去寻找依赖库
(2)程序链接时,在指定的目录中,隐式的链接那些动态库所需要的链接库。
使用此方法可以找到指定路径下的.so。
输入路径
pwd指的是当前路径,用的符号是键盘左上角的那个而不是单引号。
相关文章推荐
- Linux socket 初步
- Linux Kernel 4.0 RC5 发布!
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- Linux 下无损图片压缩小工具介绍