我正在尝试在 Raspberry Pi 上使用 libcamera 构建我的 Qt 应用程序,但 qt 项目不会构建,而是显示错误:命令行中缺少 DSO。 我已经从源代码构建了 libcamera(它是一个 .so 库),并将其包含在我的 .pro 文件中:
INCLUDEPATH += $$PWD/../libcamera/include
LIBS += -L$$PWD/../libcamera/build/src/libcamera -lcamera
我也试过这个,结果一样:
INCLUDEPATH += /usr/local/include/libcamera
LIBS += -lcamera
准确的错误:
error: /usr/local/lib/aarch64-linux-gnu/libcamera-base.so.0.0.4: error adding symbols: DSO missing from command line
我很确定我把它包含错了,但我不知道如何以最终工作的方式包含它。我如何正确地包括这个?
编辑:LibCamera 已正确安装,因为来自here 的this example 运行正常。其他 Qt 应用程序也可以运行,但这个不会。
至于包含 - $PWD 实际上是 /home/pi/app 并且在 /home/pi/libcamera 中我从源代码构建了 libcamera。
但是/usr/local/include/libcamera确实包含头文件,而/usr/local/lib/aarch64-linux-gnu确实包含libcamera-base.so。
具有完整输出的构建命令:
g++ -Wl,-rpath,/opt/Qt/6.2.4-armv8/lib -Wl,-rpath-link,/opt/Qt/6.2.4-armv8/lib
-o app LibCamera.o main.o mainwindow.o qrc_resource.o moc_mainwindow.o `pkg-config --cflags --libs opencv4` -lpigpiod_if2
-lrt -ldl -lpython3.9 -lcamera /opt/Qt/6.2.4-armv8/lib/libQt6Charts.so -pthread
/opt/Qt/6.2.4-armv8/lib/libQt6OpenGLWidgets.so /opt/Qt/6.2.4-armv8/lib/libQt6Widgets.so /opt/Qt/6.2.4-armv8/lib/libQt6OpenGL.so
/opt/Qt/6.2.4-armv8/lib/libQt6Gui.so -lEGL /opt/Qt/6.2.4-armv8/lib/libQt6Core.so -lpthread -lGLESv2
/usr/bin/ld: LibCamera.o: undefined reference to symbol '_ZN9libcamera8UniqueFD5resetEi'
/usr/bin/ld: /usr/local/lib/aarch64-linux-gnu/libcamera-base.so.0.0.4: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make: *** [Makefile:285: app] Error 1
我的 .pro 文件的一部分(跳过源、标题和资源):
QT += core gui charts
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++14
QT_CONFIG -= no-pkg-config
INCLUDEPATH += /usr/include/opencv4
LIBS += `pkg-config --cflags --libs opencv4`
LIBS+= -lpigpiod_if2 -lrt -ldl
CONFIG += no_keywords
INCLUDEPATH += /usr/include/python3.9
LIBS += -lpython3.9
INCLUDEPATH += /usr/local/include/libcamera/libcamera
LIBS += -lcamera
获取编译器和链接器参数的正确方法似乎是
pkg-config
.
参考Linking libraries to a QT project using pkg-config output you should use
的答案QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig
PKGCONFIG += libcamera
并删除
INCLUDEPATH
和LIBS
的手动规范。
根据不同的答案,第一行
QT_CONFIG ...
可能需要也可能不需要。
我没有测试建议的解决方案。