簡體   English   中英

使用 MSVC 命令行創建動態庫

[英]Create dynamic library using MSVC command line

我已經閱讀了很多帖子,但我不明白如何在命令行中使用 MSVC 在 Windows 上創建一個簡單的動態庫。 我正在做的是:

1º) 對 DLL 進行編碼

動態文件

#pragma once

__declspec(dllexport) void HelloWorld();

動態文件

#include "dynamic.h"
#include <stdio.h>

void HelloWorld(){
    printf("Hello World");
}

2º) 編譯它

cl /LD dynamic.c

(它正確編譯並且沒有錯誤生成 dynamic.dll 和 dynamic.lib)

3º) 嘗試測試一下

主文件

#include<stdio.h>
#include"dynamic.h"
int main(){

    HelloWorld();

    return 0;
}
cl main.c dynamic.lib

錯誤(通過 cl.exe x64)

main.cpp
Microsoft (R) Incremental Linker Version 14.16.27034.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:main.exe
main.obj
.\dynamic.lib
main.obj : error LNK2019: unresolved external symbol "void __cdecl HelloWorld(void)" (?HelloWorld@@YAXXZ) referred in main
main.exe : fatal error LNK1120: unresolved externals

請教我動態庫編譯是如何工作的,因為我無法理解

在 dynamic.h 中嘗試這種方式:

#ifdef __cplusplus  
extern "C" {
#endif 
    __declspec(dllexport) void HelloWorld();
#ifdef __cplusplus 
}
#endif 

使用 'dumpbin.exe /exports dynamic.dll' 顯示導出的符號

main.c它需要看到這樣的函數聲明:

__declspec(dllimport) void HelloWorld();

因此,您不能使用與當前相同的dynamic.h來構建 DLL 和構建main.c

通常人們會使用預處理器設置,因此相同的頭文件具有不同的 declspec,具體取決於包含它的人,例如:

// dynamic.h
#ifndef DLL_FUNCTION 
#define DLL_FUNCTION __declspec(dllimport)
#endif

DLL_FUNCTION void HelloWorld();

dynamic.c(在 DLL 中):

#define DLL_FUNCTION __declspec(dllexport)
#include "dynamic.h"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM