生成使用来自应用程序的符号的库

papitou34

我有一个使用QtCreator(QT5.13)构建的应用程序,其中包含一个应用程序MyApp,并假设一个动态库MyLib。该动态库还调用应用程序中定义的函数。

1)使用正确的INCLUDEPATH和头文件,我的项目使用MSVC在Windows平台上编译并执行。

2)我也成功地在Unix Ubuntu(QT5.13)上移植了该项目,但对.PRO进行了少量修改,基本上添加了“ -r dynamic”并删除了直接引用“ LIBS + = $$ PWD / lib / MyApp.lib

3)现在,我去了在Windows平台上用Mingw(mingw730_64)编译我的项目。该应用程序将编译并生成可执行文件。但是我的MyLib链接器出现错误。例如 :

错误:未定义对__imp__ZN13FBSFBaseModelC2Ev的引用

以及MyLib调用的MyApp中存在的所有符号。

我显然不了解与平台的链接过程,也不了解编译器如何静态或动态地解析符号。谢谢您的帮助

在Windows和Mingw上,我尝试不使用GCC:QMAKE_LFLAGS + = -r动态获取未定义的引用。

我尝试使用“ GCC:QMAKE_LFLAGS + = -r动态”,但似乎未被winGW识别

适用于Windows / MVSC的MyApp.PRO:

    TARGET    =    MyApp
    TEMPLATE    =    app
    LIBS    +=    -L$$PWD/lib    -lOtherLib
    GCC:QMAKE_LFLAGS += -r dynamic

适用于linux和GCC的MyLib.PRO可以运行:

    TARGET    =    MyLib
    TEMPLATE    =    lib
    WIN32:LIBS    +=    $$PWD/lib/MyApp.lib
本杰明·T

如评论中所述,具有需要exe文件中的符号的库是向后的。

无论如何。在Linux上它可以使用,-rdynamics因为Linux的ELF格式可以支持未定义的符号。

在Windows上,必须向链接器提供提示,以了解在哪里可以找到符号。因此,您将永远无法-rdynamics选择。您要做的是提供一个.lib文件,该文件描述exe文件中将提供哪些符号。

这就是为什么WIN32:LIBS += $$PWD/lib/MyApp.lib使其适用于MSVC。

但是,MinGW不识别.lib文件,而是使用.a文件。因此,您需要替换$$PWD/lib/MyApp.lib$$PWD/lib/MyApp.a

请注意,如果MyApp.a在编译时没有生成MyApp.exe,则可能意味着两件事:

  1. 您需要添加-Wl,--out-implib=MyApp.a到exe的链接命令。
  2. 您需要__declspec(dllexport)在应用程序代码中标记带有的导出符号

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用来自应用程序的 Kibana 视图查询

在应用程序中使用来自 Angular 库的资产

来自应用程序的通话活动

烧瓶:“来自应用程序导入应用程序”?

如何在Azure功能中重用来自应用程序服务的AD身份验证?

dotnet 核心库应用程序可以使用来自消费应用程序的 appsettings.json 文件吗?

在Perl或Neko中使用来自64位应用程序的32位库

使用来自另一个应用程序的开发中的库

来自应用程序的Redis健康检查

来自应用程序状态的Jquery Datatable源

封装来自应用程序的自定义服务

出现来自应用程序委托的错误-Google登录

iOS:使用Amazon SNS以编程方式触发来自应用程序的推送通知

需要现有用户能够使用数组查看来自应用程序的数据

使用来自 PowerShell 的参数运行应用程序

动态地向页面添加媒体查询并覆盖来自应用程序端生成的 html 的样式

使用来自 C 库的损坏符号的 C++ 程序导致未定义符号

使用来自Android本机应用程序的ADAL库在Azure AD上对用户进行身份验证

在显示来自viewDidload的警报之前,先显示来自应用程序委托的警报

来自站点的静态文件工作,但不是来自应用程序

xpages:引用来自不同数据库/应用程序的视图

来自应用程序的链接总是打开一个 file:// URL

在Webdyn Pro ABAP中显示来自应用程序服务器的PDF

来自应用程序的OpenCv + Gstreamer,初始延迟30秒

在HTML文件中显示来自应用程序脚本文件的数组

来自应用程序委托的当前视图控制器

Swift Xcode 6中来自应用程序的iPhone通话

org.apache.spark.SparkException:由于阶段故障,作业中止:来自应用程序的任务

NodeJS + Cpanel错误:未收到来自应用程序的响应(Node js,Express,Mongoose)