为什么qmake不包含库文件?
Why doesn't qmake include library files?
我正在尝试 link 我的 Qt 项目的第三方库。这是我的 .pro 文件:
TEMPLATE = app
TARGET = camera_ui
QMAKE_LFLAGS += -Wl --enable-new-dtags -Wl -rpath /opt/pylon5/lib64
INCLUDEPATH += -I/opt/pylon5/include
LIBS += -L/opt/pylon5/lib64 -Wl -E \
-lpylonbase \
-lpylonutility \
-lGenApi_gcc_v3_0_Basler_pylon_v5_0 \
-lGCBase_gcc_v3_0_Basler_pylon_v5_0 \
-lopencv_core \
-lopencv_highgui
# Input
HEADERS += basler_opencv_utils.h camera_interface.h mainwindow.h
FORMS += mainwindow.ui
SOURCES += basler_opencv_utils.cc main.cpp mainwindow.cpp
但这里是 运行 qmake
然后 make
.
之后的输出
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I-I/opt/pylon5/include -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o basler_opencv_utils.o basler_opencv_utils.cc
basler_opencv_utils.cc:5:33: fatal error: pylon/PylonIncludes.h: No such file or directory
compilation terminated.
Makefile:373: recipe for target 'basler_opencv_utils.o' failed
make: *** [basler_opencv_utils.o] Error 1
请注意 INCLUDE_PATH 有效,但 LIBS 和 QMAKE_LFLAGS 未包含在构建命令中。我查看了 this and this but those didn't solve my problem. I've also tried adding TARGETDEPS += libpylonbase.so
as per this question,没有任何变化。
我也尝试使用 Qt Creator 为我制作 .pro 文件,但我无法弄清楚我应该在 "library files" 字段中输入向导的内容。
更新: 在下面部分的帮助下,我能够让它工作。如果其他人正在尝试将 Basler Pylon SDK 与 QT5 一起使用,这里是一个有效的 make 文件(也包括 OpenCV)。
QT += core gui widgets
TEMPLATE = app
TARGET = camera_ui
PYLON_ROOT = /opt/pylon5
# Input
HEADERS += basler_opencv_utils.h camera_interface.h mainwindow.h
FORMS += mainwindow.ui
SOURCES += basler_opencv_utils.cc main.cpp mainwindow.cpp
QMAKE_CPPFLAGS += /opt/pylon5/include
QMAKE_CXXFLAGS += -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable
QMAKE_LFLAGS_RPATH += -Wl,--enable-new-dtags -Wl,-rpath,/opt/pylon5/lib64
INCLUDEPATH += /opt/pylon5/include
INCLUDEPATH += /opt/pylon5/lib64
LIBS += /opt/pylon5/lib64 -Wl,-E -lpylonbase -lpylonutility -lGenApi_gcc_v3_0_Basler_pylon_v5_0 -lGCBase_gcc_v3_0_Basler_pylon_v5_0
LIBS += -lopencv_core -lopencv_highgui
不,您的 INCLUDEPATH
不起作用。您的包含是 INCLUDEPATH += -I/opt/pylon5/include
,解析为 -I-I/opt/pylon5/include
正确 (-I/opt/pylon5/include
),这是一个无效目录。 -I
必须从 INCLUDEPATH
中删除。头文件PylonIncludes.h
预计在/opt/pylon5/include/pylon/PylonIncludes.h
包含库的正确路径是
LIBS += -L"/home/directory" -lmylibrary -mylibrary2
- 如果找不到库,编译器会抛出错误。
LIBS += -L/opt/pylon5/lib64 -Wl -E \
无效,可能会截断 -WL -E \
之后的库
您的链接器标志:QMAKE_LDFLAGS
是正确的。 QMAKE_LFLAGS += -Wl
等。为什么在 g++ 命令行中看不到它?是编译器不是链接器,你之前出错了
我正在尝试 link 我的 Qt 项目的第三方库。这是我的 .pro 文件:
TEMPLATE = app
TARGET = camera_ui
QMAKE_LFLAGS += -Wl --enable-new-dtags -Wl -rpath /opt/pylon5/lib64
INCLUDEPATH += -I/opt/pylon5/include
LIBS += -L/opt/pylon5/lib64 -Wl -E \
-lpylonbase \
-lpylonutility \
-lGenApi_gcc_v3_0_Basler_pylon_v5_0 \
-lGCBase_gcc_v3_0_Basler_pylon_v5_0 \
-lopencv_core \
-lopencv_highgui
# Input
HEADERS += basler_opencv_utils.h camera_interface.h mainwindow.h
FORMS += mainwindow.ui
SOURCES += basler_opencv_utils.cc main.cpp mainwindow.cpp
但这里是 运行 qmake
然后 make
.
g++ -c -m64 -pipe -O2 -Wall -W -D_REENTRANT -fPIC -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -I. -I-I/opt/pylon5/include -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtGui -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o basler_opencv_utils.o basler_opencv_utils.cc
basler_opencv_utils.cc:5:33: fatal error: pylon/PylonIncludes.h: No such file or directory
compilation terminated.
Makefile:373: recipe for target 'basler_opencv_utils.o' failed
make: *** [basler_opencv_utils.o] Error 1
请注意 INCLUDE_PATH 有效,但 LIBS 和 QMAKE_LFLAGS 未包含在构建命令中。我查看了 this and this but those didn't solve my problem. I've also tried adding TARGETDEPS += libpylonbase.so
as per this question,没有任何变化。
我也尝试使用 Qt Creator 为我制作 .pro 文件,但我无法弄清楚我应该在 "library files" 字段中输入向导的内容。
更新: 在下面部分的帮助下,我能够让它工作。如果其他人正在尝试将 Basler Pylon SDK 与 QT5 一起使用,这里是一个有效的 make 文件(也包括 OpenCV)。
QT += core gui widgets
TEMPLATE = app
TARGET = camera_ui
PYLON_ROOT = /opt/pylon5
# Input
HEADERS += basler_opencv_utils.h camera_interface.h mainwindow.h
FORMS += mainwindow.ui
SOURCES += basler_opencv_utils.cc main.cpp mainwindow.cpp
QMAKE_CPPFLAGS += /opt/pylon5/include
QMAKE_CXXFLAGS += -Wno-unknown-pragmas -Wno-unused-parameter -Wno-unused-variable
QMAKE_LFLAGS_RPATH += -Wl,--enable-new-dtags -Wl,-rpath,/opt/pylon5/lib64
INCLUDEPATH += /opt/pylon5/include
INCLUDEPATH += /opt/pylon5/lib64
LIBS += /opt/pylon5/lib64 -Wl,-E -lpylonbase -lpylonutility -lGenApi_gcc_v3_0_Basler_pylon_v5_0 -lGCBase_gcc_v3_0_Basler_pylon_v5_0
LIBS += -lopencv_core -lopencv_highgui
不,您的
INCLUDEPATH
不起作用。您的包含是INCLUDEPATH += -I/opt/pylon5/include
,解析为-I-I/opt/pylon5/include
正确 (-I/opt/pylon5/include
),这是一个无效目录。-I
必须从INCLUDEPATH
中删除。头文件PylonIncludes.h
预计在/opt/pylon5/include/pylon/PylonIncludes.h
包含库的正确路径是
LIBS += -L"/home/directory" -lmylibrary -mylibrary2
- 如果找不到库,编译器会抛出错误。LIBS += -L/opt/pylon5/lib64 -Wl -E \
无效,可能会截断-WL -E \
之后的库
您的链接器标志:
QMAKE_LDFLAGS
是正确的。QMAKE_LFLAGS += -Wl
等。为什么在 g++ 命令行中看不到它?是编译器不是链接器,你之前出错了