前言
哎,这个问题是真的难受,中间尝试了很多方法,报了很多种错误,焦头烂额。不得不说在windows上开发真的是坑贼多。
环境
使用Qt Creator开发,Qt版本5.14,CMake版本3.26.2,win10系统。
问题描述
博主需要开发一个给脑电采集设备打标签的系统,而设备只能使用并口通讯,也就是说,我需要在Qt上写出一个接口用来给bp设备传数据。在网上找了很久,没找到qt的并口通讯的方法,于是问了同学,得知需要用到一个C++的第三方类库。下载网址:http://www.highrez.co.uk/Downloads/InpOut32/
下好了之后,把库放到system32和我的项目目录下。把头文件和库放好了之后,在CMakeLists.txt引入动态库:
link_libraries(${PROJECT_SOURCE_DIR}/dll/inpoutx64.dll)
注意,这个有个坑(当然,也有可能只有我不知道),需要把这串指令放到add_library()或者add_executable()前面,不然会失败。
然后在我自己的头文件和源文件里引入它的头文件,并且调用库里面的函数。报错:
error: LNK1104: 无法打开文件“inpoutx64.lib” 动态库
或者报错:
error: LNK1107: 文件无效或损坏: 无法在 0x2E8 处读取
当然,修改的过程还有其它错误,那些都好解决。主要是这俩错误。注意,此时我用的编译器是MSVC2017 32bit,还没有意识到问题的严重性。我尝试了很多方法都不行,都是报这个错。
解决方法
问题出现的第四天,我突然想到,这种库的运用面肯定十分广,那么就会涉及到跨平台,跨平台就需要用到GCC的编译器,也就是minGW,还家伙,会不会是我用的MSVC编译器所以才不行的。好,换minGW编译器,clean,Run Cmake,编译,好家伙,还是报错。陷入沉思。噢噢噢噢噢噢!库的版本是64位的,我用的minGW是32位的,好,换成minGW64bit的,clean,Run Cmake,编译,Nice!编译通过。
总结
使用第三方库的时候,注意库是用什么编译器编译的,这点很重要不让就会出现我这种情况。哎,还是经验不足导致的。