【cmake实战七】如何使用编译的库(动态库dll)2——windows系统

一、文件和目录

在这里插入图片描述

1、main.cpp

#include<iostream>
#include<windows.h>

//此#pragma comment和最外层的CmakeLists.txt中的TARGET_LINK_LIBRARIES(hello haha)作用一样,二者选其一即可
//#pragma comment(lib,"C:\\Users\\jx\\Desktop\\test06\\lib\\Debug\\haha.lib") 
#include "./haha/haha.h"

using namespace std;

int main()
{
	cout<<"hello world"<<endl;
	haha();

	return 0;
}

2、CmakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)

PROJECT(NEWHELLO)

ADD_EXECUTABLE(hello main.cpp)

ADD_SUBDIRECTORY(haha)

INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}/haha") #要到haha目录,否则找不到

TARGET_LINK_LIBRARIES(hello haha) #会生成haha.lib链接到haha.dll,和静态生成的haha.lib不同,并非真正的静态库

SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")
SET(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")

3、haha

  • haha.h
#ifndef HAHA_H
#define HAHA_H

#include<iostream>

extern "C" __declspec(dllexport) void haha();
#endif

  • haha.cpp
#include "haha.h"
using namespace std;
void haha()
{
	cout<<"haha"<<endl;
}
  • CmakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.8.0)

SET(TARGET "haha")

#ADD_LIBRARY(haha STATIC haha.cpp)
ADD_LIBRARY(haha SHARED haha.cpp)

SET(EXECUTABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")
SET(LIBRARY_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/lib")

二、构建、编译、运行

1、构建(新建build目录,在build目录下执行)

cmake ..

2、编译

devenv.com NEWHELLO.sln /Build "Debug|x64"

3、运行

.\hello.exe

在这里插入图片描述

三、知识讲解

1、动态库的两种调用方式

2、如何证明隐式调用真的调用了haha.dll

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑同学的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值