我试图在树莓派上使用libcamera构建我的Qt应用程序,但Qt项目不会构建,而是显示错误:命令行缺少DSO。我已经从源代码构建libcamera(它是一个。so lib),并将其包含在我的。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安装正确,因为这个例子从这里正常运行。其他Qt应用程序也可以运行,但这个不能。至于include - $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 libcamera --cflags
表示-I/usr/local/include/libcamera
,pkg-config libcamera --libs
表示-L/usr/local/lib/aarch64-linux-gnu -lcamera -lcamera-base
获取编译器和链接器参数的正确方法似乎是pkg-config
。
参考使用pkg-config输出将库链接到QT项目的答案,您应该使用
QT_CONFIG -= no-pkg-config
CONFIG += link_pkgconfig
PKGCONFIG += libcamera
,删除INCLUDEPATH
和LIBS
的手动规格。
根据不同的答案,第一行QT_CONFIG ...
可能是必要的,也可能不是。
我没有测试提出的解决方案。