我从今天早上开始尝试为 QT 调用 qxmpp 编译一个 XMPP 库。
我尝试使用 Qt Creator 并执行 Build All,但编译器找不到名为 -lqxmpp0 的东西,我不知道它是什么。不幸的是,谷歌没有帮助。
我的 Qt 窗口:
提前感谢您的帮助。
请检查 qxmpp.pri 中是否有类似这样的定义:
QXMPP_INCLUDEPATH = $$PWD/src/base $$PWD/src/client $$PWD/src/server
# Determine library name
CONFIG(debug, debug|release) {
QXMPP_LIBRARY_NAME = qxmpp_d
} else {
QXMPP_LIBRARY_NAME = qxmpp
}
# Determine library type (shared or staticlib)
isEmpty(QXMPP_LIBRARY_TYPE) {
android | ios {
QXMPP_LIBRARY_TYPE = staticlib
} else {
QXMPP_LIBRARY_TYPE = shared
}
}
您是否看到 QXMPP_LIBRARY_NAME 定义了库的名称,还要检查 examples.pro 中是否包含 qxmpp.pri。我希望我的回答能有所帮助。
-llibrary -l 库
链接时搜索名为 library 的库。(将库作为单独参数的第二种选择仅用于 POSIX 合规性,不推荐。)
在命令中编写此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,“foo.o -lz bar.o”在文件 foo.o 之后但在 bar.o 之前搜索库“z”。如果 bar.o 引用 'z' 中的函数,则可能不会加载这些函数。
链接器在标准目录列表中搜索该库,该库实际上是一个名为 liblibrary.a 的文件。然后,链接器使用这个文件,就好像它已经按名称精确指定了一样。
搜索的目录包括几个标准系统目录以及您使用 -L 指定的任何目录。
通常以这种方式找到的文件是库文件——其成员是目标文件的归档文件。链接器通过扫描归档文件来处理归档文件,其中的成员定义了迄今为止已被引用但尚未定义的符号。但是如果找到的文件是一个普通的目标文件,它会以通常的方式链接。使用 -l 选项和指定文件名的唯一区别是 -l 用“lib”和“.a”包围库并搜索多个目录。