zoukankan      html  css  js  c++  java
  • QT下调用DLL出现LNK2019问题的解决

    在QT下完成了DLL,并建立了测试程序进行了验证,一切正常。但想到未来可能要在C#中调用,则希望将导出的文件名设置成原名,所以对每个引出的函数加上 extern "C" 前缀。DLL编译通过,但测试程序则报告LNK2019错误,找不到当初已经测试过的所有导出函数。去掉extern "C" 前缀,编译又恢复正常,这下有点懵。

    检查项目设置,发现构建设置中的构建目录有提示,大意是希望把编译的目的目录应当放在源项目目录下,且发现测试程序和DLL的Makefile有互相覆盖的提示。

    推测是编译目标目录设置的问题,原来为了方便,将测试程序的目标目录设置在了DLL的目标目录中,这可能是问题的所在。

    将测试程序的编译目标目录改回到源项目目录下,然后将DLL及其lib文件拷贝到该目录下,然后编译通过。

    总结:为了方便将测试程序的编译目标目录设置成了DLL的目标目录,导致了测试程序无法找到带有extern "C" 前缀的DLL导出函数,具体原因不太清楚。但教训是各个项目最好是使用项目设置缺省的编译目标目录,然后需要的话可以用编译脚本将DLL和lib文件拷贝到可执行文件的目录中。

    但是,后来发现原因可能不是这样的,我将所有DLL项目的目标目录设为可执行文件的目录中,则通过了。其原因不太明白

  • 相关阅读:
    继承(JAVA)
    第一个Java应用
    Java面向对象编程
    学生管理系统(分层开发)
    ComboBox的数据联动
    二进制、八进制、十进制、十六进制之间的转换
    C# using的一些事
    JVM最多支持多少个线程?
    Java日志体系居然这么复杂?——架构篇
    java 架构之路(队列)kafka
  • 原文地址:https://www.cnblogs.com/myboat/p/14048920.html
Copyright © 2011-2022 走看看