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上静态库和动态库的编译和使用(附外部符号错误浅谈)

gcc新版本号引起的编译错误(命令运行时的外部库输入位置)

SFGUI/C++ 编译问题。错误 2019:未解析的外部符号

PHP Bambalam 和外部库

秀技术,把Cocos C++和Lua游戏编译到浏览器上跑?!

使用外部库找不到入口点错误