微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 CMake 在 C++ 中创建和链接共享库 .so CMakeLists.txt 生成共享库问题

如何解决使用 CMake 在 C++ 中创建和链接共享库 .so CMakeLists.txt 生成共享库问题

我创建了一个 C++ 类,在其中使用 getrusage getrusage(RUSAGE_SELF,&usage) 计算 cpu 使用率。

我可以成功创建并链接我创建的 shared library .so,但是,我想在其他一些外部项目中使用相同的 shared.so 库。例如,如果我想将此 .so 链接到在不同项目中生成的二进制文件

这是我从源文件 CMakeLists.txt 创建共享库 libcpp_cpu_usage_library.so${PROJECT_SOURCE_DIR}/src/cpu_usage.cpp

CMakeLists.txt 生成共享库

############################################################
# Find CMake,Compiler Version,and OS
############################################################
cmake_minimum_required(VERSION 3.15)
project(cpp_cpu_usage VERSION 1.0.1 DESCRIPTION "cpp_cpu_usage description")
set(CMAKE_CXX_STANDARD 20)

message(STATUS "CMake version   : " ${CMAKE_SYstem_VERSION})
message(STATUS "Compiler        : " ${CMAKE_CXX_COMPILER})
message(STATUS "Operating System: " ${CMAKE_SYstem})
message(STATUS "SYstem PROCESSOR: " ${CMAKE_SYstem_PROCESSOR})

############################################################
# Create a library cpp_cpu_usage_library  [.so]
############################################################
#Generate the shared library from the library sources
add_library(cpp_cpu_usage_library SHARED
        ${PROJECT_SOURCE_DIR}/src/cpu_usage.cpp
        )
add_library(cpp_cpu_usage::library ALIAS cpp_cpu_usage_library)


target_include_directories(cpp_cpu_usage_library
        PUBLIC
        ${PROJECT_SOURCE_DIR}/include
        )

############################################################
#  Create a executable for cpp-cpu-usage
############################################################
# Add an executable with the above sources
add_executable(cpp_cpu_usage_binary
        ${PROJECT_SOURCE_DIR}/src/main.cpp
        )

############################################################
# Target Link Libaries
############################################################
# link the cpp_cpu_usage_library target with the cpp-cpu-usage target
target_link_libraries(cpp_cpu_usage_binary
        PRIVATE
        cpp_cpu_usage::library
        )

问题

它与生成到同一个 CMake 项目的二进制 cpp_cpu_usage_binary 一起使用,但是,现在我想使用 libcpp_cpu_usage_library.so 是一些外部 CMake 项目。

例如,我想在外部 C++ 和 CMake 项目中使用该共享库。

#include <iostream>
using namespace cpu_usage;

int main(int argc,char** argv)
{
  double utime;
  double stime;
  double cputime;

  cpuUsage::cpu_start();
  delay();
  cpuUsage::cpu_end();

  
  printf("utime [getrusage]: %f\n",utime);
  printf("stime [getrusage]: %f\n",stime);
  printf("cputime [getrusage]: %f\n",cputime);

  return 0;
}

我知道我必须将上述二进制文件链接libcpp_cpu_usage_library.so 但我如何将 libcpp_cpu_usage_library.so 安装到 usr/local/libroot 然后在我的外部 CMake 项目。

感谢并期待。

阿尔斯兰

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?