gpt4 book ai didi

c++ - 使用 __declspec(dllexport) 的符号导出问题

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:02 28 4
gpt4 key购买 nike

我将 __declspec(dllexport) 与库中的多个方法一起使用。但是其中一个符号没有正确导出。有问题的值称为“重新启动”。我在下面给出了 dumpbin.exe 的输出:

1    0 0002DB27 ev_err = @ILT+2850(_ev_err)
2 1 0002DADC m_foutput = @ILT+2775(_m_foutput)
3 2 0002D361 m_free = @ILT+860(_m_free)
4 3 0002D505 m_free_vars = @ILT+1280(_m_free_vars)
5 4 0002D055 m_get = @ILT+80(_m_get)
6 5 0002D95B m_ident = @ILT+2390(_m_ident)
7 6 0002D80C m_inverse = @ILT+2055(_m_inverse)
8 7 0002D0F5 m_mlt = @ILT+240(_m_mlt)
9 8 0002D339 m_ones = @ILT+820(_m_ones)
10 9 0002D43D m_rand = @ILT+1080(_m_rand)
11 A 0002DC3F m_resize = @ILT+3130(_m_resize)
12 B 0002D465 m_zero = @ILT+1120(_m_zero)
13 C 0002D3A7 px_foutput = @ILT+930(_px_foutput)
14 D 0002DA2D px_free = @ILT+2600(_px_free)
15 E 00092DE0 restart = _restart
16 F 0002DB45 set_err_flag = @ILT+2880(_set_err_flag)
17 10 0002D550 v_foutput = @ILT+1355(_v_foutput)
18 11 0002D839 v_free = @ILT+2100(_v_free)

这似乎表明重启没有正确导出,但我不明白为什么。

我使用以下行导出变量:

extern  __declspec(dllexport) jmp_buf   restart;

出现这种异常的原因是什么,如何解决?

最佳答案

因为你的“重启”标识是数据,不是代码。它可能应该被命名为“restart_state”。从 DLL 导出数据是一种受支持的方案,但也是一种让您大吃一惊的好方法。客户端代码必须与 DLL 代码具有严格的二进制兼容性。对于 setjmp() 来说,这是一个非常值得怀疑的命题,保存的状态高度依赖于实现。

您最好导出调用 setjmp() 和 longjmp() 的函数并保持 jmp_buf 私有(private)。

关于c++ - 使用 __declspec(dllexport) 的符号导出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2475794/

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