与代码块一起使用时,使用 Visual Studio 创建的静态库显示对 Myfunction 的未定义引用

Posted

技术标签:

【中文标题】与代码块一起使用时,使用 Visual Studio 创建的静态库显示对 Myfunction 的未定义引用【英文标题】:Static Library Created With Visual Studio Shows Undefined Reference To Myfunction when used with codeblocks 【发布时间】:2015-04-10 15:09:28 【问题描述】:

您好,我使用 Microsoft Visual Studio 2008 创建了一个静态库,还创建了一个标头,其中包含在该库中编写的函数的所有函数原型,但是当我链接并尝试使用代码块编译它时,它显示未定义的引用'MyFunction' 但我已经包含了包含其原型的标题并链接了库。为什么它不起作用?

代码(库):

int add(int x,int y)

      return x+y;

代码(标题):

int add(int,int);

所有这些都可以在 Visual Studio 下工作,但不能在代码块下工作。 在此先感谢...对不起,我是编程新手..

【问题讨论】:

您为什么希望能够链接由不同编译器创建的静态库? 但我使用了第三方库(BASS 音频库),它同时适用于 Visual Studio 和 Code Blocks。 那将是一个导入库而不是静态库 请原谅我......我是新手。什么是导入库?我是否必须为每个不同的编译器制作一个静态库? 导入库用于链接到 dll。实际代码是外部的。静态库是自包含的,它有实现。 【参考方案1】:

由 Visual Studio 生成的静态库通常不能被 MinGW 使用,反之亦然。这有多种原因,但最常见的是静态库与生成库的编译器的 C++ 运行时相关联。而且您正在尝试与使用不同运行时的编译器链接。

您报告的问题听起来更像是名称管理不匹配的问题,但即使您解决了名称管理问题,您也可能会遇到其他问题。

显而易见的解决方案是构建静态库的多个版本,为您使用的每个编译器构建一个版本。

【讨论】:

谢谢!

以上是关于与代码块一起使用时,使用 Visual Studio 创建的静态库显示对 Myfunction 的未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 中,与 std::async 一起使用时未调用“thread_local”变量的析构函数,这是一个错误吗?

将 QCharts 与 Visual Studio 2015 一起使用时未解析的外部符号

为啥将 volatile 与同步块一起使用?

关于在 Visual Studio 中使用 #pragma region 折叠代码块

在 Visual Studio 上的 C++ 项目中将 NetCDF(通过 vcpkg 安装)与 CMake 一起使用时未解析的外部符号

TFS 2012 express 可以与 Visual Studio 2005 一起使用吗?