在Ubuntu上,我正在学习有关cmake和make的知识,并且仅尝试一个简单的示例。我有两个目录:src和build。在中src,我有两个文件:main.cpp和和CMakeLists.txt,(仅具有)以下文本:
add_executable(test main.cpp)
link_directories(/usr/lib/x86_64-linux-gnu)
target_link_libraries(test protobuf)
在中/usr/lib/x86_64-linux-gnu,有一个共享库称为libprotobuf.so,我想对其进行链接。我main.cpp通过包含相关的头文件来使用此库中的函数#include <google/protobuf/message.h>。
现在,在build目录中,运行cmake ../src,然后运行make。但是,然后出现链接器错误,告诉我protobuf库中某些函数的未定义引用。如果我搜索中的所有文件和子目录build,则不会提及与protobuf相关的任何内容。
但是,如果我删除文件中的这一link_directories行CMakeLists.txt,而是在指定可执行文件时将完整路径写入库,即target_link_libraries(test /usr/lib/x86_64-linux-gnu/libprotobuf.so),它可以编译并很好地链接。
为什么link_directories不允许cmake查找此库?
富国沪深
相关分类