QT下调用DLL出现LNK2019问题的解决
在QT下完成了DLL,并建立了测试程序进行了验证,一切正常。但想到未来可能要在C#中调用,则希望将导出的文件名设置成原名,所以对每个引出的函数加上 extern "C" 前缀。DLL编译通过,但测试程序则报告LNK2019错误,找不到当初已经测试过的所有导出函数。去掉extern "C" 前缀,编译又恢复正常,这下有点懵。
检查项目设置,发现构建设置中的构建目录有提示,大意是希望把编译的目的目录应当放在源项目目录下,且发现测试程序和DLL的Makefile有互相覆盖的提示。
推测是编译目标目录设置的问题,原来为了方便,将测试程序的目标目录设置在了DLL的目标目录中,这可能是问题的所在。
将测试程序的编译目标目录改回到源项目目录下,然后将DLL及其lib文件拷贝到该目录下,然后编译通过。
总结:为了方便将测试程序的编译目标目录设置成了DLL的目标目录,导致了测试程序无法找到带有extern "C" 前缀的DLL导出函数,具体原因不太清楚。但教训是各个项目最好是使用项目设置缺省的编译目标目录,然后需要的话可以用编译脚本将DLL和lib文件拷贝到可执行文件的目录中。
但是,后来发现原因可能不是这样的,我将所有DLL项目的目标目录设为可执行文件的目录中,则通过了。其原因不太明白