作者owem0410 (闲学生)
看板C_and_CPP
标题[问题] cmake有library undefined reference
时间Mon Jul 29 02:35:46 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
Docker(linux ubuntu 16.04)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Redis
问题(Question)D:
在一个openvino的smaple中
想要
#include <hiredis/hiredis.h>
但是却跑出
main.cpp:(.text+0x691): undefined reference to `redisCommand'
main.cpp:(.text+0x699): undefined reference to `freeReplyObject'
上网查後应该是库没有export
所以在环境变数中
export LD_LIBRARY_PATH=/usr/local/lib/libhiredis:$LD_LIBRARY_PATH
也在export中确定有此资料夹
但状况却一样
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
main.cpp:(.text+0x691): undefined reference to `redisCommand'
main.cpp:(.text+0x699): undefined reference to `freeReplyObject'
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
最上层的 CMakeLists
https://hackmd.io/@YlZanT8HShi_e7mTutiZ0g/r1bDHJ2fB
专案 cmakelist
https://hackmd.io/@YlZanT8HShi_e7mTutiZ0g/SJybuPozB
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 203.77.33.178 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1564338949.A.C80.html
1F:推 LPH66: LD_LIBRARY_PATH 是执行期的东西, 你这是连结期错误 07/29 10:58
好的我用这个关键字查一下。
2F:→ LPH66: 你可能要找你的编译器/连结器里寻找函式库路径的选项 07/29 10:58
3F:→ LPH66: (印象中是 -L (大L) 之类的?) 07/29 10:59
4F:推 LPH66: 喔, 是 cmake...有看到 link_directories(${LIB_FOLDER}) 07/29 11:05
5F:→ LPH66: 但看起来好像没有设定 LIB_FOLDER 变数的指令? 07/29 11:06
6F:→ LPH66: 加个 set(LIB_FOLDER <连结函式库所在目录>) 试试 07/29 11:07
感谢回覆刚刚发现我贴错cmakelist,所以修正抱歉。
※ 编辑: owem0410 (111.71.39.10 台湾), 07/29/2019 11:21:59
※ 编辑: owem0410 (111.71.39.10 台湾), 07/29/2019 11:42:54
7F:推 LPH66: 最上层还是没看到 LIB_FOLDER 07/29 12:51
8F:→ Lipraxde: cmake 通常要用 target_link_libraries 去添加要连结的 07/29 22:43
9F:→ Lipraxde: 库,你不是找不到 library 是根本没去 link 它吧 07/29 22:43
感谢两位大大的回答
在专案的cmakelist中加入下面
我一开始用发现是找的到的所以就卡住了
find_library(hiredis /usr/local/lib/ )
後来加入target_link_libraries(${TARGET_NAME} hiredis)
就可以成功build
※ 编辑: owem0410 (203.77.33.178 台湾), 07/29/2019 22:55:25