这个是我折腾比较久的地方了,尤其是想用一个好的IDE来写用例,但是动态库配置了好久;
1.Code::Blocks:
这个IDE比较轻量级,非常好用,容易上手,配置也很简单;
不足是觉得它的补全功能不太好,而且做大工程有些力不从心,调试很不方便;
配置:
在工程文件中右键->Build Options...->Linker Setting
Link libraries里加入共享库(.so .a)的路径,生成的执行文件依赖库路径就是这里加入的(绝对/相对路径,与这里保持一致)
Other linker options里可以添加额外的链接命令;
->Build Options...->Search directories
Compiler里加入头文件的路径;
至此,简单的code::blocks已经可以开始调试和使用测试用例了。
2.CodeLite:
这个IDE和VS非常非常非常像,连配置都差不多,功能多,调试方便;
不足是许多设置有些复杂
配置:
在工程文件右键->Settings->Compiler
Include Paths里加入头文件的路径;
->Settings->Linker
Linker Option加入链接命令;
Libraries Search Path中加入共享库搜索路径;
Libraries中填共享库名称,值得一提的是,codelite中Libraries名称是去掉前缀和后缀的,如:libDataBus.so填入的名称是Databus;
不足是这样添加生成的执行文件依赖库路径始终为系统路径,网上有人说修改Environment中的环境变量即可,但是我没有成功;
相对路径我的解决方法是,在Linker Options中加入路径即可(如:../DataBus/Release/libDataBus.so),Libraries Search Path和Libraries中不需要再添加了。
这种方法实际上是直接利用g++编译器的命令执行的,所以我觉得最好的解决方案始终是熟悉编译器的命令,不要过度依赖IDE的配置程序。
接下来发现codelite还不能调试,因为生成文件的路径在./Release下,向上一层找不到共享库,所以还需要修改一下->Common Settings->General里的配置:
->Intermediate Folder中间文件路径,就是*.o文件等等,建议不要和执行文件放在一起,很乱;
->OutPut File生成文件名称,生成的执行文件路径和名称;
->Executable to Run/Debug运行/调试路径名称,就是调试按钮时运行程序的路径和名称,名称最好和生成路径一致;
->Working Directory工作路径,指定当前工作目录所在路径,也是调试时程序认为自己的根目录;
调试程序先找Run/Debug路径,没找到执行程序后找Woring + Run/Debug路径;
做一下相应的配置就好了。
ps:
linux上查看可执行文件依赖库命令
$readelf -d xxx
$readelf -d xxx | grep NEEDED