我是Boost的新手,并且是QT的入门者,因此我不了解打包系统在QT,Boost和CPP中的工作方式。

我正在尝试根据this教程在QT中使用Socket.IO集成Boost。我正在尝试不使用CMake,因为它对我来说更容易理解。
我收到的错误和警告如下图:
c++ - QT,socket.io和boost集成 undefined reference 错误-LMLPHP

到目前为止,我所做的就是:
-下载并解压后的Boost
-命令历史:

254  ./bootstrap.sh
255  ./b2 --help
256  ./b2
257  ./bjam install --prefix="./" --with-system --with-date_time --with-random link=static runtime-link=shared threading=multi
258  git clone --recurse-submodules https://github.com/socketio/socket.io-client-cpp.git

-将github存储库中src文件夹的内容复制到我的项目下的文件夹名称siosrc
-更新了pro文件,这是它的内容:
TEMPLATE = app

QT += qml quick widgets

CONFIG += c++11

SOURCES += main.cpp \
            siosrc/sio_client.cpp \
            siosrc/sio_socket.cpp \
            siosrc/internal/sio_client_impl.cpp \
            siosrc/internal/sio_packet.cpp

RESOURCES += qml.qrc

# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =

# Default rules for deployment.
include(deployment.pri)

INCLUDEPATH += /home/akash/Softwares/Boost/boost_1_61_0/include/ \
                /home/akash/QTProjects/SioCpp/socket.io-client-cpp/lib/websocketpp/ \
                /home/akash/QTProjects/SioCpp/socket.io-client-cpp/lib/rapidjson/include/ \
                /home/akash/Softwares/Boost/boost_1_61_0/lib/

我执行的所有步骤都是我可以从github自述文件和socket.io's cpp blog中找出来的,这对我来说似乎已经过时了,因为源文件sio_packet.cpp的位置相对于github存储库中文件的位置而言是不正确的。

我希望我已经足够描述性了,有人可以帮助我!

最佳答案

您的构建未链接到boost::system

假设您已根据here指令为boost构建了linux(即,将其添加到$BOOST_ROOT环境变量的目录中),则可以将boost库目录添加到pro文件中,然后添加boost_system lib文件:

# Ensure that the BOOST_ROOT environment variable has been set
BOOST_ROOT = $$(BOOST_ROOT)
isEmpty(BOOST_ROOT) {
  error("Please set BOOST_ROOT to the location of the Boost libraries")
} else {
  message(Using Boost from: $$BOOST_ROOT)
}

LIBS += -L$${BOOST_ROOT}/stage/lib
LIBS += -lboost_system

注意:在boostlinux/usr/lib等处安装了/usr/lib64打包的/usr/local/lib库,因此不需要定义其路径。

我使用了许多boost库,发现更容易列出所需的库并在pro文件中使用循环来添加链接依赖关系,例如:
BOOST_LIBS = system log_setup log program_options thread

LIBS += -L$${BOOST_ROOT}/stage/lib
BOOST_LIB_PREFIX = boost_
for(lib, BOOST_LIBS) {
  message(link: $${BOOST_LIB_PREFIX}$${lib})
  LIBS += -l$${BOOST_LIB_PREFIX}$${lib}}
}

10-04 21:16
查看更多