gpt4 book ai didi

c++ - 如何链接在 .h 文件中声明为 extern 的函数以创建 .dll 文件?

转载 作者:行者123 更新时间:2023-12-02 10:08:47 24 4
gpt4 key购买 nike

我想为我工作中使用的用 C++ 编写的组件之一创建一个动态库(.dll)。
几个函数在 .h 文件中声明为 extern,并在相应的 .cpp 文件中引用。
链接它们时,我收到 Unresolved 符号错误。

xxxx.obj:错误 LNK2019:函数“int __cdecl start_xx(int,int, int,char * * const)"(?start_xx@@YAHHHHQEAPEAD@Z)

这些函数的用法就像,它们需要由使用该库的任何应用程序定义。所以这些函数的定义只会在使用这个库的应用程序中。
因此,我无法在链接时添加任何其他具有这些 API 定义的库。

创建 dll 时需要如何处理外部 API?

最佳答案

DLL 无法链接到应用程序中的函数,就好像 DLL 和应用程序是一个大型 C++ 程序一样。

Windows DLL 本身更像是一个可执行文件:它不像 C 或 C++ 静态库。

最简单的方法是让应用程序在一些初始化调用中将指向回调/自定义函数的指针传递给 DLL。更高级,您可以将接口(interface)传递给 DLL。第三种选择是函数由应用程序必须提供的它们自己的 DLL 提供。

基于可执行文件和 DLL 都使用 Portable Executable 格式这一事实,还有一种可能的脏低级方法,因此原则上可执行文件可以导出函数以供 DLL 使用,实际上既充当可执行文件又充当 DLL。但是,很久以前我在那个级别上做了一些事情,我不能保证它是可行的,无论如何我建议不要这样做。

关于c++ - 如何链接在 .h 文件中声明为 extern 的函数以创建 .dll 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34174951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com