我正在尝试使用 cmake 构建我的项目。带有第 3 方头文件和库。标头位于
/usr/local/include/
中,库位于 /usr/local/lib/
中。我认为编译器找到了这些文件,因为我在包含时没有收到错误,但是当我尝试编译它时,它找不到我正在调用的函数。
/mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:12: undefined reference to `ola::InitLogging(ola::log_level, ola::log_output)'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:13: undefined reference to `ola::DmxBuffer::DmxBuffer()'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:14: undefined reference to `ola::DmxBuffer::Blackout()'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:17: undefined reference to `ola::client::StreamingClient::StreamingClient(ola::client::StreamingClient::Options const&)'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:19: undefined reference to `ola::client::StreamingClient::Setup()'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:26: undefined reference to `ola::DmxBuffer::SetChannel(unsigned int, unsigned char)'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:27: undefined reference to `ola::client::StreamingClient::SendDmx(unsigned int, ola::DmxBuffer const&)'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:34: undefined reference to `ola::client::StreamingClient::~StreamingClient()'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:34: undefined reference to `ola::DmxBuffer::~DmxBuffer()'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:34: undefined reference to `ola::client::StreamingClient::~StreamingClient()'
/usr/bin/ld: /mnt/c/Users/Max/CLionProjects/Lightning_Controller/main.cpp:34: undefined reference to `ola::DmxBuffer::~DmxBuffer()'
collect2: error: ld returned 1 exit status
如果我用 G++ 和这个参数编译它
g++ main.cpp -lola -lolacommon -lprotobuf
它可以工作。
我尝试使用这篇帖子中提到的选项,但它没有改变任何东西。
我的问题是如何将其从 g++ 转换为 cmake ?
如果能获得有关您正在做什么的更多信息,那就太好了,但这就是我为您提供的信息。
编译器找不到您正在调用的函数的实现。它找到标头,但不会将库与实际实现链接起来。使用
CMake
,指定要链接的库。
我不知道你使用的是哪个版本的C++,所以请相应地更改它。
cmake_minimum_required(VERSION 3.10)
project(Lightning_Controller)
set(CMAKE_CXX_STANDARD 14)
include_directories(/usr/local/include/)
add_executable(Lightning_Controller main.cpp)
link_directories(/usr/local/lib/)
target_link_libraries(Lightning_Controller ola olacommon protobuf)