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
1.GIF
(8.84 KB, 下载次数: 61)
下载附件
2012-09-28 14:29 上传
作者:
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