WebAssembly 编译器错误:使用外部库编译时未定义符号
Posted
技术标签:
【中文标题】WebAssembly 编译器错误:使用外部库编译时未定义符号【英文标题】:WebAssembly compiler error: undefined symbol when compile with a external library 【发布时间】:2021-07-12 10:04:40 【问题描述】:大家早上好, 我开始使用 webassembly。 我描述了我的问题: 我创建了一个简单的静态库(称为 TinyLib),我想在我的 WebAssembly 项目中使用。 TinyLib 包含构造函数、析构函数和数字属性。 WebAssembly 项目(称为 TestWidget)是一个简单的对话框,里面有一个标签,我在其中编写了 TinyLib 库。 我的意图是将属性的值写入标签。 我尝试成功地将这两个项目编译为桌面模式项目(桌面 Qt 5.15.0 MinGW 64 位)。 我用 Qt 5.15.0 WebAssembly 编译 TinyLib 并生成 libTinyLib.a lib 我编译了TestWidget,alon并且项目运行了! 现在,如果我尝试在 WebAssembly 模式下编译两个项目(TestWidget 使用 TinyLib),在编译 TestWidget 时,我会收到以下错误消息:
错误:未定义的符号:_ZN7TinyLibC1Ev 警告:与 -s LLD_REPORT_UNDEFINED 链接以获取有关未定义符号的更多信息 警告:要禁用未定义符号的错误,请使用 -s ERROR_ON_UNDEFINED_SYMBOLS = 0 错误:未定义符号:_ZN7TinyLibD1Ev
我尝试在网上搜索,但没有成功。 在这个论坛中,我发现了以下线程: https://forum.qt.io/topic/115660/add-static-library 但这对我没有帮助。
你也有同样的问题吗?你是怎么解决的?
操作系统视窗 10 专业版; Qt 5.15.0; EMCC 1.39.8
我的专业档案是
TestWidget.pro
QT += core gui
greaterThan (QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c ++ 11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE = 0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
dialog.cpp
HEADERS += \
dialog.h
FORMS += \
dialog.ui
# Default rules for deployment.
qnx: target.path = /tmp/$$TARGET/bin
else: unix:! android: target.path = /opt/$$TARGET/bin
! isEmpty (target.path): INSTALLS += target
win32: LIBS += -L$$PWD/../../TinyLib/build-TinyLib-Qt_5_15_0_WebAssembly-Debug/ -lTinyLib
INCLUDEPATH += $$PWD/../../TinyLib/TinyLib
DEPENDPATH + = $$PWD/../../TinyLib/TinyLib
【问题讨论】:
【参考方案1】:联系qt支持后,他们建议我更换
win32: LIBS += -L$$PWD/../../TinyLib/build-TinyLib-Qt_5_15_0_WebAssembly-Debug/ -lTinyLib
与
wasm:LIBS += -L$$PWD/../../TinyLib/build-TinyLib-Qt_5_15_0_WebAssembly-Debug/ -lTinyLib
【讨论】:
以上是关于WebAssembly 编译器错误:使用外部库编译时未定义符号的主要内容,如果未能解决你的问题,请参考以下文章
linux上静态库和动态库的编译和使用(附外部符号错误浅谈)
SFGUI/C++ 编译问题。错误 2019:未解析的外部符号