CMake“uuid”链接失败
Posted
技术标签:
【中文标题】CMake“uuid”链接失败【英文标题】:CMake "uuid" linking FAIL 【发布时间】:2016-08-21 19:15:01 【问题描述】:在尝试构建时出现此错误:
对“uuid_generate”的未定义引用
对“uuid_unparse”的未定义引用
这是我的 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.6)
project(Synergy)
set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -std=c++11 -luuid -pthread")
find_package (Threads)
set(SOURCE_FILES Functions.cpp Inotify.cpp Inotify.h main.cpp Master.h Message.cpp Message.h Server.cpp Server.h Threads.cpp )
add_executable(synergy_server $SOURCE_FILES)
我可以通过自己创建Makefile并添加-luuid标志来解决这个问题。
但我想用 CMake 来做,我试图在 CMakeLists.txt 文件中添加这个标志,但它没有帮助:(
我已经安装了 uuid-dev(不是问题)
希望你能帮助我。
祝你有美好的一天
编辑:
我将target_link_libraries(Synergy uuid)
添加到文件末尾并且它可以工作,但是有更好的方法(查看下面的答案)
【问题讨论】:
CMake link to external library的可能重复 您的问题几乎是所有 CMake 教程的一部分。您的实际问题更为笼统。 “如何使用 CMake 链接外部库” 你说得对,我是堆栈溢出的新手,所以我还在学习。下次我会更一般。但问题是我尝试添加外部库但它不起作用。 【参考方案1】:这不是编写 CMake 脚本的好方法。 CMake 带有一组丰富的功能,您必须使用这些功能来描述您想要做什么。
在你的情况下,你必须避免像你所做的那样直接设置标志。这样,您将能够更改编译器甚至操作系统,并且您的脚本仍然可以工作。
在你的情况下,我会这样写:
cmake_minimum_required(VERSION 3.6)
project(Synergy)
set(CMAKE_CXX_STANDARD 11)
# using pkg-config to configure uuid
find_package(PkgConfig REQUIRED)
find_package(Threads REQUIRED)
pkg_search_module(UUID REQUIRED uuid)
set(SOURCE_FILES Functions.cpp Inotify.cpp Inotify.h main.cpp Master.h message.cpp Message.h Server.cpp Server.h Threads.cpp )
add_executable(synergy_server $SOURCE_FILES)
target_include_directories(synergy_server PUBLIC $UUID_INCLUDE_DIRS)
target_link_libraries(synergy_server $UUID_LIBRARIES $CMAKE_THREAD_LIBS_INIT)
对了,uuid-dev
是什么意思?我的系统里没有这样的东西
【讨论】:
uuid-dev是uuid的开发包,即uuid的headers。也许您的发行版没有将此库拆分为开发和库包。 我的 cmake 文件由 Clion 创建,我会尝试使用你的文件,我会告诉你它是否适合我 "PkgConfig" 未找到! -- 跨平台的就这么多。以上是关于CMake“uuid”链接失败的主要内容,如果未能解决你的问题,请参考以下文章
GLEW + cmake 链接失败“未定义对符号 glDrawElements 的引用”+“命令行中缺少 DSO”
cmake build dir 存储在 ramdisk 中并符号链接到项目导致 make 失败