QT下调用DLL出现LNK2019问题的解决
在QT下完成了DLL,并建立了测试程序进行了验证,一切正常。但想到未来可能要在C#中调用,则希望将导出的文件名设置成原名,所以对每个引出的函数加上 extern "C" 前缀。DLL编译通过,但测试程序则报告LNK2019错误,找不到当初已经测试过的所有导出函数。去掉extern "C" 前缀,编译又恢复正常,这下有点懵。
检查项目设置,发现构建设置中的构建目录有提示,大意是希望把编译的目的目录应当放在源项目目录下,且发现测试程序和DLL的Makefile有互相覆盖的提示。
推测是编译目标目录设置的问题,原来为了方便,将测试程序的目标目录设置在了DLL的目标目录中,这可能是问题的所在。
将测试程序的编译目标目录改回到源项目目录下,然后将DLL及其lib文件拷贝到该目录下,然后编译通过。
总结:为了方便将测试程序的编译目标目录设置成了DLL的目标目录,导致了测试程序无法找到带有extern "C" 前缀的DLL导出函数,具体原因不太清楚。但教训是各个项目最好是使用项目设置缺省的编译目标目录,然后需要的话可以用编译脚本将DLL和lib文件拷贝到可执行文件的目录中。
但是,后来发现原因可能不是这样的,我将所有DLL项目的目标目录设为可执行文件的目录中,则通过了。其原因不太明白
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步