Chinaunix

标题: VC 的 .lib 用reimp 生成mingw .a 后怎么连接? [打印本页]

作者: duanlin    时间: 2012-09-28 14:29
标题: VC 的 .lib 用reimp 生成mingw .a 后怎么连接?
本帖最后由 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


作者: gvim    时间: 2012-09-28 14:32
extern "C"
作者: duanlin    时间: 2012-09-28 14:40
回复 2# gvim

那样是不行的,我试过了,在帖子里也已经说明了。
   
作者: gvim    时间: 2012-09-28 14:45
回复 3# duanlin

你以为我没看到你第二个函数里的extern吗?
作者: duanlin    时间: 2012-09-28 14:56
回复 4# gvim

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

请问,应该怎样连接呢?


作者: gvim    时间: 2012-09-28 16:01
这个帮不了你,很久没搞vc的东西怕说错了给你添麻烦。等下面的人看看
作者: hellioncu    时间: 2012-09-28 17:20
dll输出的名称被修饰过了,改成


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

}
作者: OwnWaterloo    时间: 2012-09-28 17:36
回复 1# duanlin

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

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





欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2