gpt4 book ai didi

c++ - GCC 仅从 dll 导出修饰函数名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:50 25 4
gpt4 key购买 nike

我有一个 dll,它导出一个函数...

extern "C"
int __stdcall
MP_GetFactory( gmpi::IMpUnknown** returnInterface )
{
}

我使用 Code::Blocks GCC 编译器 (V3.4.5) 编译它。问题:生成的 dll 导出修饰函数名称...

MP_GetFactory@4

加载失败,应该是旧的...

MP_GetFactory

我已经为此研究了大约 4 个小时。我认为 --add-stdcall-alias 是解决此问题的选项。我的代码:: block 日志显示...

mingw32-g++.exe -shared -Wl,--out-implib=bin\Debug\libGainGCC.a -Wl,--dll obj\Debug\se_sdk3\mp_sdk_audio.o obj\Debug\se_sdk3\mp_sdk_common.o obj\Debug\Gain\Gain.o obj\Debug\Gain\gain.res -o bin\Debug\GainGCC.sem --add-stdcall-alias -luser32

..所以我认为这是正确的选择?但没有运气。 Dependancy Walker 仅显示正在导出的修饰名称。我通过使用 __cdecl 而不是 __stdcall 让它有点工作,然后名称导出正常,但函数在调用时破坏堆栈(因为调用者期望其他调用约定)。

最佳答案

很抱歉回答我自己的问题,终于弄明白了。

项目/构建选项/链接器/其他链接器选项-Wl,--杀死

...杀死装饰'@'符号等

关于c++ - GCC 仅从 dll 导出修饰函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2505582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com