Linux下的开发经验总结

常见问题解决:

(1)cannot open shared object file

错误提示
XXX: error while loading shared libraries: xxx.so.X:cannot open shared object file: No such file or directory

情况分析:
(1)未添加相关库文件目录或更新库文件的搜索缓存
解决步骤:
1.检查库文件目录是否在/etc/ld.so.conf或者include的conf文件中
2.运行sudo /sbin/ldconfig更新相关配置
(2)未安装相关库文件
解决步骤:
1.在对应的软件安装时,configure加入参数–enable-shared

lib中有相应文件

当lib中有相应文件时,可能是安装路径不对,仅需把对应的文件链接到程序需要的文件的位置即可,位置的判断可用如下命令LD_DEBUG=libs XXXX -v 2>&1 > /dev/null | less其中XXXX为程序

(2)bash: /usr/bin/curl: No such file or directory

情况分析:make install程序后,键入命令提示上述错误,用sudo运行则可以(也有普通用户和超级用户运行后发现程序版本不一致等情况,/usr/bin和/local/bin均有该程序),用locate寻找程序后发现,/usr/local/bin后均有该程序,普通用户运行echo $PATH后确定有/usr/local/bin,直觉觉得是未更新bash配置。
解决步骤:
1.source ~/.bashrc

(3)Undefined reference to symbol

1.检查是否安装相关库文件
2.安装后需要sudo ldconfig更新库文件缓存
3.如果曾经安装过其他版本,可能是版本冲突所致,用locate找到相关文件(主要是库文件)并删除后重新安装

Tips:
1.不确定运行的是/usr/bin和/usr/local/bin时,可以用which命令,或者看PATH的顺序

Linux下编写C和CPP的注意事项

近日,正在linux下进行一些c和cpp的程序开发,有一些关于库的链接问题,记下以备用。

目前有使用GCC G++还有QTcreator来进行编译程序。QT中的pro文件,其中INCLUDEPATH +=后面填写要引用的头文件的路径(GCC库文件目录下的不必填写),LIBS +=后填写要链接的库的地址,其后也可以填写gcc的-l参数,此处展开讲解一下-l参数,以-lxxx为例,当填写-lxxx时,gcc会在库文件路径中去搜寻以libxxx.so为名的动态链接库库文件,而动态链接库库文件路径是由/etc/ld.so.conf.d目录下的.conf文件来决定的,可以在此目录下任意增加.conf文件来增加库文件路径。

CMAKE的注意事项

make报错的相关解决方案

(1)can not be used when making a shared object

错误提示
relocation R_X86_64_32 against '.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

解决步骤:
1.查看CMakeLists.txt中CMAKE_CXX_FLAGS的参数中是否含有-fPIC
2.重新安装报错的库,安装时,如果是configure,则添上–enable-shared参数,如果是cmake则在CMakeLists.txt的CMAKE_CXX_FLAGS的参数中添加-fPIC,即
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值