【问题标题】:How to add opendnp3 as a static C++ library如何将 opendnp3 添加为静态 C++ 库
【发布时间】:2019-07-23 00:06:30
【问题描述】:

我目前正在尝试将opendnp3 C++ library 设置为静态库。我已经按照their build guide for Windows 构建了解决方案,并且能够生成几个我认为是静态库的 .lib 文件。

在一个完全独立的文件夹中,我在以下文件夹结构下有以下文件:

C:/Development/C++/opendnp3/lib/ # .lib files are contained in this directory

C:/Development/pybexample/
--> CMakeLists.txt
--> src/
    --> test.cpp

我的 CMakeLists.txt 配置如下:

cmake_minimum_required(VERSION 2.8)
project(pybexample)

set(SOURCE_FILES src/test.cpp)

add_library(opendnp3 STATIC IMPORTED)
set_target_properties(opendnp3 PROPERTIES IMPORTED_LOCATION C:/Development/C++/opendnp3/lib/opendnp3.lib)

add_executable(pybexample ${SOURCE_FILES})
target_link_libraries(pybexample opendnp3)

在 test.cpp 中,我只是调用:

#include <iostream>
#include "opendnp3/LogLevels.h"
using namespace std;

int main(void) {
    cout << "Hello world!" << endl;
    system("pause");
}

但是,当我尝试构建 test.cpp 时,我收到一条错误消息:“无法打开包含文件:'opendnp3/LogLevels.h':没有这样的文件或目录”。我觉得肯定有一些我错过的非常基本的东西,但我对使用静态库和 CMake 还是很陌生,所以我似乎无法弄清楚。任何人都可以帮助就我的包含失败的原因提供一些指示吗?

【问题讨论】:

  • 您没有在CMakeLists.txt中添加包含目录
  • ^ 感谢您指出这一点!原来有两个问题。第一个问题是库实际上没有正确编译,所以我实际上没有要包含的标题。第二个问题是我的头文件中缺少 include_directories() 命令。正确编译库并在我的 CMakeLists.txt 中添加该行后,问题似乎已解决。
  • 我建议您回答自己的问题。

标签: c++ cmake include static-libraries dnp3


【解决方案1】:

原来这是由两个问题引起的。

第一个问题是我需要在CMakeLists.txt 中添加一行,以便将 opendnp3 的头文件添加到我的项目中。这是通过在add_executable(pybexample ${SOURCE_FILES}) 行之前添加include_directories(&lt;path_to_headers&gt;) 来完成的。

但是,在这样做的过程中,很明显还有第二个问题:我没有正确构建库,因为它没有生成任何带有库的标头。原来我忽略了run the INSTALL project 的说明。设置 CMAKE_INSTALL_PREFIX 并运行 INSTALL 项目后,库和头文件已生成并可供使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多