Macos CMake成功,但链接时make失败
我正试图用CMake在macOS上编译我的项目。我通过brew安装了gstreamer,可以访问include目录。例如,这是gstreamer的include directoy:Macos CMake成功,但链接时make失败,macos,makefile,cmake,homebrew,gstreamer,Macos,Makefile,Cmake,Homebrew,Gstreamer,我正试图用CMake在macOS上编译我的项目。我通过brew安装了gstreamer,可以访问include目录。例如,这是gstreamer的include directoy: /usr/local/Cellar/gstreamer/1.16.2/include/gstreamer-1.0/ 使用以下CMakeLists.txt运行cmake时,所有操作都成功运行,但当我尝试链接以下错误时,make失败: [ 25%] Linking CXX executable multiviewer
/usr/local/Cellar/gstreamer/1.16.2/include/gstreamer-1.0/
使用以下CMakeLists.txt
运行cmake
时,所有操作都成功运行,但当我尝试链接以下错误时,make
失败:
[ 25%] Linking CXX executable multiviewer
ld: library not found for -lgstreamer-1.0
CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
project(application)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
find_package(Qt5Core REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5WebSockets REQUIRED)
# Required for GStreamer
find_package(PkgConfig)
# Look for GStreamer installation
pkg_check_modules(GST REQUIRED gstreamer-1.0)
add_executable(application
main.cpp qml.qrc server.cpp server.h
${PROTO_SRCS} ${PROTO_HDRS} client.cpp client.h)
# Qt5
target_link_libraries(application Qt5::Core Qt5::Quick Qt5::WebSockets)
# GStreamer
target_include_directories(application PUBLIC ${GST_INCLUDE_DIRS})
target_compile_options(application PUBLIC ${GST_CFLAGS})
target_link_libraries(application ${GST_LIBRARIES})
以下是我安装的软件包:
brew install pkg-config
brew install gstreamer
brew install gst-plugins-base
brew install gst-plugins-good
brew install gst-plugins-bad
brew install gst-plugins-ugly
brew install gst-libav
pkg config的输出--cflags gstreamer-1.0
:
-I/usr/local/Cellar/libffi/3.2.1/lib/libffi-3.2.1/include -I/usr/local/Cellar/gstreamer/1.16.2/include/gstreamer-1.0 -I/usr/local/Cellar/glib/2.62.4/include -I/usr/local/Cellar/glib/2.62.4/include/glib-2.0 -I/usr/local/Cellar/glib/2.62.4/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/Cellar/pcre/8.43/include
-L/usr/local/Cellar/gstreamer/1.16.2/lib -L/usr/local/Cellar/glib/2.62.4/lib -L/usr/local/opt/gettext/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lintl
pkg config的输出--libs gstreamer-1.0
:
-I/usr/local/Cellar/libffi/3.2.1/lib/libffi-3.2.1/include -I/usr/local/Cellar/gstreamer/1.16.2/include/gstreamer-1.0 -I/usr/local/Cellar/glib/2.62.4/include -I/usr/local/Cellar/glib/2.62.4/include/glib-2.0 -I/usr/local/Cellar/glib/2.62.4/lib/glib-2.0/include -I/usr/local/opt/gettext/include -I/usr/local/Cellar/pcre/8.43/include
-L/usr/local/Cellar/gstreamer/1.16.2/lib -L/usr/local/Cellar/glib/2.62.4/lib -L/usr/local/opt/gettext/lib -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lintl
我是否需要安装其他东西,或者我做错了什么?错误:
ld: library not found for -lgstreamer-1.0
指示库gstreamer-1.0
已传递给链接器,但链接器不知道在哪里可以找到它(可能是因为它不在典型的系统路径中)。由CMake提供GST库的完整路径。从文档中,以下是为通用软件包XXX
填充的一些与库相关的变量:
: 只有库(不带'-l')\u库
: 图书馆及其绝对路径\u链接\u库
: 库的路径(不带“-L”)\u LIBRARY\u DIRS
GST\u LIBRARIES
变量将仅列出库名称(gstreamer-1.0;gobject-2.0;glib-2.0;intl
),但在这种情况下,我们还需要提供库路径。因此,将target\u link\u libraries()
调用更改为使用GST\u link\u libraries
:
target_link_libraries(application PUBLIC ${GST_LINK_LIBRARIES})
GST\u库
变量的内容是什么?GStreamer库似乎没有被链接。尝试消息(“GST\u库:${GST\u库}”)
@squareskittles输出为:GST\u库:gstreamer-1.0;gobject-2.0;glib-2.0;intl
Ok,这个问题是编译器不知道库的完整路径。如果正确填充了GST\u LINK\u LIBRARIES
变量,您可能会更幸运。@squareskittles谢谢!这就是解决办法。你可能想写一个答案,这样我就可以为未来的迷失灵魂接受它