[QtCreator(5)] 加载Qt静态库和动态库[TZZ]
1、启动QtCreator软件,新建一个名为“QTestLib1”的控制台应用程序项目;
2、项目创建完毕后,调试运行程序。能够见到弹出控制台窗口,表示项目正常;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/460fdc8333bf3bef769a670b3f3ea8db564a1a68.jpg)
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/a99a494afa32939c6622e8015719ce2c5a1b1568.jpg)
3、打开QTestLib1的项目目录,新建一个名为“include”的新目录,然后将之前创建过的QStaticLib1静态项目和QSharedLib1动态库项目的头文件拷贝到该目录中;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/6834ecc4ec9959435dd47f4d95425d6b05d10468.jpg)
4、回到“QTestLib1目录”,再次新建一个“lib目录“,然后将静态库项目和动态库项目生成的Debug版静态库和动态库文件拷贝到该目录中;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/486884883913e8e58e3b9a0f352f477047187d68.jpg)
5、回到QtCreator中,双击龅歧仲半打开“QTestLib1.pro”文件,通过INCLUDEPATH变量指定项目包含目录,通过LIBS变量指定项目引用的库目录和库文件(注:GCC编译器指定库目录和库文件,需要分别用-L和-l前缀,并且要求链入文件以lib前缀开头);
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/4759c1dae43b3b8668f478e4185653bbf9207568.jpg)
6、双击打开“main.cpp”文件,在该文件中包含静态库和动态库的头文件,然后在main函数中分别实例化QStaticLib1类和QSharedLib1类,然后分别调用它们的sayHello菱诎逭幂方法。代码添加完毕后,编译当前项目,编译输出窗口没有打开错误信息则表示代码正确;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/03605157935653bb96f553481d0b312104617168.jpg)
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/05e24be983aee8d72effd45c6b781431deb66668.jpg)
7、项目编译完毕后,调试运行程序。不幸的是,程序直接“崩溃”了。QtCreator直接给出了反汇编代码,并提示“Stopped : signal-received”。但是,如果此刻继续点击调试工具栏中的“继续按钮”,发现控制台可以正常弹出并输出打印信息;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/e2aefe781431dfb64eb960d512cf02532e636368.jpg)
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/22c4fe36e29147e8b6350ec1b603bbea3f865868.jpg)
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/31097f43d7d448318a3ec114d40f822b75ee5168.jpg)
8、关闭控制窗口返回到QtCreator中,点击菜单栏上的“工具 > 选项”打开QtCreator的选项配置窗口。在该窗口中,选择“调试器 > GDB”,在“额外的启动命令”中加入“handle SIG32 nostop”命令,然后点击“OK按钮”确定设置;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/1d735518512c8cf14f721180c384cde34a2c4668.jpg)
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/7a3e980e7c75e5f45d20d9beb1ceaad7736bbc68.jpg)
9、设置完GDB额外的启动命令后,再次调试运行程序。你会发现程序一切正常了,并没有之前出现的反汇编代码;
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/354e7a781423beb9daeb167130d6e1d06ce8b368.jpg)
![[QtCreator(5)] 加载Qt静态库和动态库[TZZ]](https://exp-picture.cdn.bcebos.com/9b2098254193cee805d163a85a0ff2260c9aa868.jpg)
10、最后补充一下,这种崩溃问题实际是某些GDB版本自身的问题(处理线程信号时是否自动暂停)。只要告诉GDB遇到SIG32信号时,别停止即可让程序继续执行,并非代码存在问题;