将 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 静态库链接 的相关文章

  • 如何使用 VS2022 中的新控制台应用程序模板访问命令行参数

    我想知道如何访问命令行参数 因为这是在Program cs通过 Visual Studio 2022 中控制台应用程序的新模板创建文件 See https aka ms new console template for more infor
  • 简单的C问题

    作为我正在进行的项目的一部分 我必须开始学习 C 我已经开始解决其中的 欧拉 问题 并且遇到了麻烦 我必须找到 1000 以下的所有 3 或 5 的倍数之和 有人可以帮助我吗 谢谢 include
  • 从 Dropbox C# 下载文件[重复]

    这个问题在这里已经有答案了 我正在尝试下载 Dropbox 中的 pdf 文件 我需要将其保存到本地计算机中 可以是任何文件夹C Users User Desktop例如 这是我一直在使用的代码 public void DownloadPd
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • 有没有办法让我的程序用更少的代码运行?

    我为学校作业编写了以下代码 它编译并打印所有正确的消息 但出于我自己的好奇心 我想知道我的代码是否可以缩短并且仍然有效 我尝试了 signal 而不是 sigaction 但我听说 sigaction 比 signal 更受青睐 此外 此任
  • ASP.NET Core 中 AsNoTracking 的模拟或更好的解决方法

    您如何模拟 AsNoTracking 或者是否有更好的解决方法来解决此问题 Example public class MyContext MyContextBase Constructor public MyContext DbContex
  • 使用 pthread_cond_signal 优雅地终止线程被证明是有问题的

    我需要发射一堆线程 并希望优雅地将它们拉下来 我正在尝试使用pthread cond signal pthread cond wait实现这一目标 但遇到了问题 这是我的代码 首先是thread main static void thrma
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 对无符号 8 位整数进行左移操作 [重复]

    这个问题在这里已经有答案了 我试图理解 C C 中的移位运算符 但它们给我带来了困难 我有一个无符号 8 位整数 初始化为一个值 例如 1 uint8 t x 1 根据我的理解 它在内存中的表示方式如下 0 0 0 0 0 0 0 1 现在
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • 二维数组的列求和

    我有一个IEnumerable
  • 本地主机和 request.Url.Authority

    我的应用程序通过 URL 中的公司标识符分隔用户 company1 app com company2 app com 我正在本地 PC 上进行测试 请求如下 company1 localhost com 但是 我的 request Url
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 为什么我从 c# 到 js 得到不同的 MD5 哈希值?

    我有一个用于加密密码的 C 函数 System Security Cryptography MD5CryptoServiceProvider md5Provider new System Security Cryptography MD5C
  • 为什么 char 数组需要 strcpy 而 char star 不需要 - 在 C 中使用结构

    我对这段代码有一个误解 typedef struct EXP int x char name char lastName 40 XMP main XMP a a name eaaa a lastName strcpy a lastName
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • ASP.NET API:尚未为此 DbContext 配置数据库提供程序

    我正在尝试从我的 Net Core API 项目连接到 MySql 数据库 这是我的上下文类 public class MyContext DbContext public MyContext public MyContext DbCont
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • 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 链接器能够处理这些