用 mingw 生成 ole com dll 的一些问题

问题1:

导出符号里面有 @0,@4等等,如:

    DllCanUnloadNow@0
    DllRegisterServer@0
    DllUnregisterServe@0
    DllGetClassObject@12

解决方法:

需要链接时加上 -Wl,--kill-at 参数

问题2:

导出了很多没有用的符号,如:

_ZN13CClassFactory10LockServerEi@8
_ZN13CClassFactory14CreateInstanceEP8IUnknownRK5_GUIDPPv@16
_ZN13CClassFactory14CreateInstanceERK5_GUIDPK17CLASS_OBJECT_INITjS2_PPv
_ZN13CClassFactory14QueryInterfaceERK5_GUIDPPv@12
_ZN13CClassFactory6AddRefEv@4
_ZN13CClassFactory7ReleaseEv@4
_ZN13CClassFactoryC1EPFlRK5_GUIDPPvE
_ZN13CClassFactoryD1Ev
_ZN13IClassFactoryC2Ev
_ZN8IUnknownC2Ev
_ZN8IUnknownC2Ev

解决方法:

需要写一个 version-script 文件,链接时加上参数 -Wl,--version-script=<文件名>

文件内容如下:

{
        global:
            DllCanUnloadNow*;
            DllRegisterServer*;
            DllUnregisterServer*;
            DllGetClassObject*;

        local: *;
};

注意函数名称后面的“*”是必须的,否则不导出任何符号。

原因是version-script先起作用,然后kill-at才起作用,在version-script的时候用绝对的名字匹配,匹配不上,必须用通配符匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值