cmake--生成--动态库

一, 目录结构

├── CMakeLists.txt
├── include
│      └── shared
│              └── Hello.h
└── src
         ├── Hello.cpp
         └── main.cpp

* link:CMakeLists.txt[] - Contains the CMake commands you wish to run
* link:include/shared/Hello.h[] - The header file to include
* link:src/Hello.cpp[] - A source file to compile
* link:src/main.cpp[] - The source file with main

二,cmake基本脚本

cmake_minimum_required(VERSION 3.5)

project(hello_library)

# 根据库文件代码生成动态库
add_library(hello_library SHARED src/Hello.cpp)

# 创建动态库别名

add_library(hello::library ALIAS hello_library)

# 包含指定头文件所在的目录
target_include_directories(hello_library PUBLIC  ${PROJECT_SOURCE_DIR}/include)

# 创建可执行程序

add_executable(hello_binary 
src/main.cpp
)

# 链接动态库文件
target_link_libraries( hello_binary PRIVATE hello::library)

三,扩展分析

1.  add_library(hello_library SHARED  src/Hello.cpp)将会创建 libhello_library.so 名称的动态库。

2. 目标别名

 add_library(hello::library ALIAS hello_library)

 hello::library是hello_library的别名, 别名允许使用别名来链接对应的库文件。

原文地址:https://www.cnblogs.com/svenzhang9527/p/10703754.html

时间: 2024-11-13 06:31:45

cmake--生成--动态库的相关文章

cmake同时生成动态库与静态库的方法

我的目录结构 [[email protected] createLibrary]$ tree . ├── bin ├── build ├── CMakeLists.txt ├── include │   └── person.h ├── lib └── src ├── CMakeLists.txt ├── main │   ├── CMakeLists.txt │   └── main.cpp └── person ├── CMakeLists.txt └── person.cpp 7 dire

linux 生成动态库时提示relocation R_X86_64_32 against `.rodata' can not be used when making a shared object;

linux生成动态库时遇到了relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC错误. 由于我的系统是AMD64位的,所以需要在编译的时候添加 -fPIC选项 解决方法: 例如: g++ -c -fPIC head.cpp    生成head.o g++ -fpic -shared -o libfun.so head.o linux 生成

GCC生成动态库

以下内容仅作为本人工作笔记 main.c 1 #include <stdio.h> 2 void hello(void); 3 int main(int argc, char ** argv) { 4 printf("This is main function!\n"); 5 hello(); 6 return 0; 7 } hello.c 1 #include <stdio.h> 2 void hello() { 3 printf("This is

Linux生成动态库系统

Linux生成动态库系统 一个.说明 Linux下动态库文件的扩展名为 ".so"(Shared Object). 依照约定,全部动态库文件名称的形式是libname.so(可能在名字中增加版本). 这样.线程函数库被称作libthread.so. 静态库的文件名称形式是libname.a.共享archive的文件名称形式是libname.sa.共享archive仅仅是一种过渡形式,帮助人们从静态库转变到动态库. 小编综合自己学习体会以及网络上较好的内容.以简单的样例介绍动态库文件的生

gcc编译工具生成动态库和静态库之一----介绍

 1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链接阶段到底做了什么) 2 静态库和动态库的比较 链接静态库其实从某种意义上来说也是一种粘贴复制,只不过它操作的对象是目标代码而不是源码而已.因为静态库被链接后

交叉编译sqlite3,生成动态库

1.下载源码,解压缩sqlite-autoconf-3300100.tar.gz 2.进入解压目录,执行: #:./configure --host=arm CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ --prefix=/usr 其中--host=要运行程序的主机 CC/CXX为用到的交叉编译工具链 --prefix=安装目录 3.make 将在当前文件目录下,自动生成可执行文件sqlite3及静态库文件sqlite3.a文件: 4.su

HPunix如何生成动态库?

HPunix系统生成动态库编译的方法? 创建PIC中间文件的编译器选项是+z,创建动态库德链接器标志是-b. 1. cc +z d1.c d2.c /* 编译以".o"为扩展名的中间目标文件dl.o和dl2.o 可以同时编译多个.c文件. 2. ld -b -o  dl.so d1.o d2.o /* 根据目标文件d1.o d2.o 创建动态库dl.so 可以有多个目标文件(.o文件) 3. cc dl.so 即生成可执行文件,默认是a.out 4. cc dl.so -o  add 

Linux下RabbitMQ的编译,生成动态库和静态库

一.步骤 1.代码托管处下载代码 最新:https://github.com/alanxz/rabbitmq-c/archive/master.zip 稳定:https://github.com/alanxz/rabbitmq-c/releases/download/v0.5.2/rabbitmq-c-0.5.2.tar.gz 下载到/home/kylin/test/下 2.解压缩至/home/kylin/test/,并进入目录cd /home/kylin/test/rabbitmq-c-...

CMake生成静态库

目录结构 文件内容 Hello.h #ifndef MYSHAREDLIB_HELLO_H #define MYSHAREDLIB_HELLO_H // 打印 Hello World! void hello(); // 使用可变模版参数求和 template <typename T> T sum(T t) { return t; } template <typename T, typename ...Types> T sum(T first, Types ... rest) { r

c#生成动态库并加载

下面这段代码生成dll文件,不能编译运行.点击项目右键,点击生成,这时会在debuge文件中生成相应的配置文件. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Data; using System.Data.OleDb; names