Cmakelist 的 G++ 参数

问题描述 投票:0回答:1

我正在尝试使用 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 ?

c++ cmake g++ cmakelists-options
1个回答
0
投票

如果能获得有关您正在做什么的更多信息,那就太好了,但这就是我为您提供的信息。

编译器找不到您正在调用的函数的实现。它找到标头,但不会将库与实际实现链接起来。使用

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)
© www.soinside.com 2019 - 2024. All rights reserved.