将 Visual C 与 MinGW 静态库链接

2023-11-22

如何将 Visual C++ (2010) 控制台应用程序与由以下人员创建的 STATIC 库链接MinGW (*.a格式)?它与 Visual C++ 2010 兼容吗?

谢谢。


它不兼容。

但是,如果您从库中提取所有目标文件(使用ar),VC++ 链接器能够处理这些(我测试了它,尽管我使用 cygwin gcc 而不是 mingw gcc)。请注意,如果您不使用,您可能仍然会遇到名称修改问题extern "C".

当然你也可以使用VC++LIB.EXE工具将它们制作成 VC++ 格式的静态库。


正如 @Michael 指出的,如果您尝试在使用不同编译器构建的模块之间传递非 POD C++ 对象,那么您肯定会遇到问题。对此的修复与 DLL 情况相同:编写一个使用相同编译器(在本例中为 mingw)构建的包装器,该包装器公开可从其他工具链使用的 C 兼容接口。


// minimal.cpp
extern "C" int m(void) { return 7; }

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.5.0/lto-wrapper.exe
Target: i686-pc-cygwin
Configured with: /gnu/gcc/releases/respins/4.5.0-1/gcc4-4.5.0-1/src/gcc-4.5.0/co
nfigure --srcdir=/gnu/gcc/releases/respins/4.5.0-1/gcc4-4.5.0-1/src/gcc-4.5.0 --
prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdi
r=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --dataroo
tdir=/usr/share --docdir=/usr/share/doc/gcc4 --datadir=/usr/share --infodir=/usr
/share/info --mandir=/usr/share/man -v --with-gmp=/usr --with-mpfr=/usr --enable
-bootstrap --enable-version-specific-runtime-libs --libexecdir=/usr/lib --enable
-static --enable-shared --enable-shared-libgcc --disable-__cxa_atexit --with-gnu
-ld --with-gnu-as --with-dwarf2 --disable-sjlj-exceptions --enable-languages=ada
,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-lto --enable-jav
a-awt=gtk --disable-symvers --enable-libjava --program-suffix=-4 --enable-libgom
p --enable-libssp --enable-libada --enable-threads=posix --with-arch=i686 --with
-tune=generic --enable-libgcj-sublibs CC=gcc-4 CXX=g++-4 CC_FOR_TARGET=gcc-4 CXX
_FOR_TARGET=g++-4 GNATMAKE_FOR_TARGET=gnatmake GNATBIND_FOR_TARGET=gnatbind --wi
th-ecj-jar=/usr/share/java/ecj.jar
Thread model: posix
gcc version 4.5.0 (GCC)

$ gcc -c minimal.cpp

// minmain.cpp
extern "C" int m(void);

#include <iostream>

int main(void) { std::cout << m() << "\n"; }

R:\>cl /c /EHsc minmain.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

minmain.cpp

R:\>link minmain.obj minimal.o
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation.  All rights reserved.


R:\>minmain
7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Visual C 与 MinGW 静态库链接 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • SetCurrentDirectoryW 中的错误 206

    在我之后之前不清楚的问题 https stackoverflow com questions 44389617 long path name in setcurrentdirectoryw 我以某种方式能够创建一个具有长路径名的目录 但是
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • Visual Studio 2010 中的数据库设计器

    我需要创建一个全新的 Sql Server 2008 数据库 并希望使用 Visual Studio 2010 Ultimate 中的数据库项目 我已经创建了该项目并在下面添加了一个表格dbo架构 桌子 sql仅以纯文本形式显示 但带有颜色
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定

随机推荐

  • Linq Dynamic ParseLambda 无法解析

    我正在尝试使用我在这里找到的示例代码来完成我正在处理的事情 如何将字符串转换为其等效的 LINQ 表达式树 在解决方案中 作者使用了以下内容 var e DynamicExpression ParseLambda new p null ex
  • MVC自定义roleprovider如何将其挂接到HttpContext.Current.User.IsInRole("myrole")

    我有一个 MVC 应用程序 我为其编写了一个自定义角色提供程序 如下所示 using System using System Collections Generic using System Linq using System Web us
  • 单击“下一步”按钮后,如何将 ListView 中的列表项显示限制为 10 和下 10 个

    我有一个包含 100 个项目的列表视图 我想显示前 10 个项目 单击 下一步 按钮时 我必须显示下一个 10 个项目 即从 11 到 20 我有获取前 10 个项目的代码 public int getCount return 10 但如何
  • 从文本中提取位置的方法?

    从自由文本中提取位置的推荐方法是什么 我能想到的是使用正则表达式规则 例如 单词 在位置 但还有比这更好的方法吗 我还可以考虑建立一个包含国家和城市名称的查找哈希表 然后将文本中提取的每个标记与哈希表的标记进行比较 有人知道更好的方法吗 编
  • 错误:require.paths 被删除。使用node_modules文件夹或NODE_PATH环境变量代替

    我刚刚新安装了 Node js 现在我尝试运行一个简单的脚本 但收到以下错误消息 Error require paths is removed Use node modules folders or the NODE PATH enviro
  • UI- 路由器 -- 在每次路由更改时运行函数 -- 状态名称位于哪里?

    使用 Angularjs 和 UI Router 尝试在每次状态更改时运行一个函数 rootScope on stateChangeStart function toState if toState login UsersService r
  • 如何取消操作表

    我使用此代码在 uiactionsheet 中显示 uipicker 但是当我单击关闭按钮时 我想从视图中删除操作表 那么删除 actionSheet 表单视图的代码应该是什么 BOOL textFieldShouldBeginEditin
  • JavaScript 初学者:在 JavaScript 中使用 JSON 和对象

    我有一些 JSON 返回到浏览器 就像这个 产品 Title School Bag Image images school bag jpg 我希望这些数据成为 产品 对象 这样我就可以使用原型方法 例如toHTMLImage 返回产品的 H
  • 金字塔和 .ini 配置

    每个 Pyramid 应用程序都有一个关联的 ini 文件 其中包含其设置 例如 默认值可能如下所示 app main use egg MyProject pyramid reload templates true pyramid debu
  • java中数组循环左移n个位置

    我正在尝试仅使用单个一维数组将数组循环左移 n 个位置 我可以在两个数组中完成它 但我还没有弄清楚如何使用一个数组来完成它 请提出您的建议 实际上有一个聪明的算法可以做到这一点 我们将使用A来表示数组 N表示数组大小 以及n表示要移动的位置
  • ERROR 1048 (23000) 列不能为 NULL,但我正在插入有效数据

    Stack Overflow 上有大量这样的帖子 但是从大约 20 个帖子来看 它们要么是在与 MySQL 接口时遇到编码错误 我不想这样做 要么只是想要空值 但其表定义不正确 我在 MySQL 5 6 19 中看到一个错误 其中有一列不允
  • 对指向 const 对象的非常量指针的非常量引用

    简而言之 我有一个简单的指针 int a 现在 我想改变这个指针的值 我想在一个函数中执行此操作 函数确保它不会更改指针指向的对象 但会更改指针本身 这就是为什么我希望这个函数采用这样的参数 非常量引用 因为指针的值将被更改 到指向常量对象
  • Linux 上的 PostgreSQL“initdb”(数据库初始化)

    我正在努力在 Linux 系统 CentOS RedHat Fedora 上工作的 PostgreSQL 9 x 中创建数据库集群 单个数据库 我已经安装了正确的 PostgreSQL 软件包 服务器和客户端 但是 我无法创建数据库并获取某
  • 如何将 SSH 身份文件密钥对添加到 JKS 密钥库

    我正在构建的 Java 应用程序的任务之一是连接到远程 SFTP 服务器 为了做到这一点 我拥有远程计算机的证书和本地身份 id rsa and id rsa pub in the ssh文件夹 这工作正常 我想将证书和身份放在受密码保护的
  • django-tastypie:通过关系发布到具有ManytoMany字段的资源

    我正在为一个项目开发 API 并且通过 OrderProducts 建立订单 产品关系 如下所示 在 models py 中 class Product models Model class Order models Model produ
  • Unity解决循环依赖

    在学习Unity的同时 DI框架中C 我遇到了一种情况 其中一个类有一个 setter 注入ClassB class ClassA IClassA Dependency public IClassB ClassB get return cl
  • 在受保护的路由reactjs中传递props

    我在我的reactjs应用程序中使用受保护的路由 我想知道如何在受保护的路由中传递道具 或者是否有更优雅的方法来解决我的问题 我觉得需要在受保护的路由中传递 props 的原因是注销按钮位于受保护的组件内 我需要与包含用户尝试注销的所有路由
  • 仅带有图标的滑动 TabLayout

    下列的this例如 我能够创建一个仅包含图标的 SlidingTabLayout 但我想将它们居中 我需要创建自定义视图还是有其他解决方案 任何帮助 将不胜感激 最后我想通了 这是我的代码示例 为每个选项卡创建一个可绘制对象 在我的例子中我
  • 为什么我不能在node.js(browserify)的require()函数中使用变量作为参数?

    我尝试过类似的东西 var path right here var module require path 但它无法再以这种方式找到模块 同时 var module require right here 奇迹般有效 想要加载带有生成的字符串
  • 将 Visual C 与 MinGW 静态库链接

    如何将 Visual C 2010 控制台应用程序与由以下人员创建的 STATIC 库链接MinGW a格式 它与 Visual C 2010 兼容吗 谢谢 它不兼容 但是 如果您从库中提取所有目标文件 使用ar VC 链接器能够处理这些