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

(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")

猜你喜欢

转载自blog.csdn.net/the_k_is_on_the_way/article/details/78332641