C DLL会不会链接?

好吧,这是问题所在.为了提高我对C API的了解,我试图了解有关库文件类型的更多信息.我有很好的静态库.您只需将库链接到项目中,并在编译和链接时将其内容放在二进制文件中.但是,当我开始尝试使用动态库时,我遇到了一个问题.我能够使用__declspec函数成功编译DLL文件,并创建extern块(因此可以成功导出到C).但是,当我尝试链接文件时出现问题.基于我在网络上看到的多个教程,我创建了一个带有前向定义的标题,并将其包含在可执行项目中.然后,我确保将搜索目录添加到项目构建设置,以及我要导入的库的路径.然后,当我去构建项目时,它会产生一个链接器错误(我可以判断,因为目标文件已编译)“找不到-l [文件路径]”.是否有更多配置?我认为它与我的编译器(MinGW)有关,因为Code :: Blocks(我目前正在使用
Eclipse CDT插件)产生类似的链接错误.

如果您需要查看代码,我将在下面提供.

// EXE: main.cpp
#include <iostream>
#include "DLLTutorial.h"

int main()
{
    Function();
    std::cout << "1 + 3:\t" << Add(1, 3);
}


// DLL: DLLTutorial.cpp
#define DLL_EXPORT
#include <iostream>
#include "DLLTutorial.h"

extern "C"
{
    DLLCOMP int Add(int a, int b)
    {
        return a + b;
    };

    DLLCOMP void Function(void)
    {
        std::cout << "DLL Called!\n";
    };
};


// DLL: DLLTutorial.h
#ifndef DLLTUTORIAL_H_
#define DLLTUTORIAL_H_

#include <iostream>

#ifdef DLL_EXPORT
    #define DLLCOMP __declspec(dllexport)
#else
    #define DLLCOMP __declspec(dllimport)
#endif

extern "C"
{
    DLLCOMP int Add(int a, int b);
    DLLCOMP void Function(void);
};


#endif /* DLLTUTORIAL_H_ */

这只是我在网站上使用的非常简单的示例代码.我无法正确链接可执行文件,所以我很感激任何可以提供给我的建议.

另外,我有一个相关的问题.在线阅读一些教程,有些人提到__declspec函数是Windows / Microsoft特有的.这是真的?在哪种情况下,在其他操作系统上使用什么是相当不错的?

最佳答案 当你构建一个dll时,你也会创建一个公司的.lib文件,即’implib’.您必须在exe中静态链接此文件.

编辑:__ cdeclspec(…)确实是微软.不知道其他平台.

点赞