免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7459 | 回复: 7
打印 上一主题 下一主题

[函数] VC 的 .lib 用reimp 生成mingw .a 后怎么连接? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:53:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-28 14:29 |只看该作者 |倒序浏览
本帖最后由 duanlin 于 2012-09-28 14:58 编辑

如下代码生成一个VC lib: te.lib

typedef struct
{
  int e1;
  int e2;
} ppp;


__declspec(dllexport) int function_a(ppp a)
{
  return 0;
}

补充说明:假定这个lib是以二进制发布的,我没有源码,也无法修改和重编。我现在的需求是:用MinGW编的程序可以连接上这个lib。

-------------------------------------------------
使用reimp te.lib 生成 te.def 和 libte.a

可是如何写出 MinGW编译器可连接使用 function_a(ppp a)这个函数的代码呢?

extern "C" int function_a(ppp a);

int main(int argc,char* argv[])
{
  ppp appp;
  function_a(appp);
  
  return 0;
}

我试过的,上面的写法是不行的,连接不上。如何能让他连接上呢?
在 nm --defined-only libte.a

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
2 [报告]
发表于 2012-09-28 14:32 |只看该作者
extern "C"

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:53:17
3 [报告]
发表于 2012-09-28 14:40 |只看该作者
回复 2# gvim

那样是不行的,我试过了,在帖子里也已经说明了。
   

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
4 [报告]
发表于 2012-09-28 14:45 |只看该作者
回复 3# duanlin

你以为我没看到你第二个函数里的extern吗?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:53:17
5 [报告]
发表于 2012-09-28 14:56 |只看该作者
回复 4# gvim

可能是我问的不清楚,改了一下。

请问,应该怎样连接呢?

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
6 [报告]
发表于 2012-09-28 16:01 |只看该作者
这个帮不了你,很久没搞vc的东西怕说错了给你添麻烦。等下面的人看看

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2012-09-28 17:20 |只看该作者
dll输出的名称被修饰过了,改成


extern “C"
{
__declspec(dllexport) int function_a(ppp a)
。。。。。。

}

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
8 [报告]
发表于 2012-09-28 17:36 |只看该作者
回复 1# duanlin

你红色圈出的那部分说明: 你拿不到源代码只有binary的那个库导出的符号是C++的,而且是采用的msvc的mangling。

如果你有vc, 可以写一个库, 将那个拿不到源代码的binary包裹成C符号(或者包裹成gcc的C++符号), 就余下部分可以用mingw了。
否则, 如果完全不给用vc的话。。。  不一定不可行, 但肯定会很麻烦。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP