VisualStudio 优化编译器版本 19.00.23506.0 中存在明显的编译错误
Apparent compile bug in VisualStudio Optimizing Compiler Version 19.00.23506.0
我已经为这个错误写了一个最小的情况,它生成了EXTRN语句: 外部 _.?AU_anc@8:程序
这是代码 - 有人可以发现我做错了什么。 当我有三个以 THRCOMP 开头的语句和 3 个相应的 proc_ent 语句时,它会编译第一个和最后一个 OK,以及生成上述错误的第二个。
struct _anchor
{
int(*svc_addr) (int, void * vptr, ...);
void *reserved;
};
typedef _anchor anchor;
#define THRCOMP extern "C" __declspec(dllexport) int __stdcall
struct _proc_ent {
_proc_ent *succ;
char proc_name[32];
char comp_name[200];
int (__stdcall *faddr) (_anchor anch);
void *proc_block; // used as a temporary placeholder by thxbnet
void * label_ptr; // points to a label for subnets
bool trace;
bool composite;
bool must_run;
};
typedef _proc_ent proc_ent;
#define TRACE true
#define COMPOS true
#define NULL 0
THRCOMP ThFileWt(_anchor anch);
THRCOMP ThCopyNL(_anchor anch);
THRCOMP ThFileRd(_anchor anch);
proc_ent P0 = { NULL, "Read", "ThFileRd", ThFileRd, NULL, NULL,
TRACE, !COMPOS };
proc_ent P1 = { &P0, "Show", "ThFileWt", ThFileWt, NULL, NULL,
TRACE, !COMPOS };
proc_ent P2 = { &P1, "Copy", "ThCopyNL", ThCopyNL, NULL, NULL,
TRACE, !COMPOS };
如果有人能阐明这一点,或者给我一个解决方法,那就太好了。提前感谢!
你真的在任何地方为 ThFileRd()
等人定义了代码吗?
使用编写的代码,我得到了 p0、p1 等的未定义符号,这些符号似乎对应于除最后一个之外的所有函数名称:
1>Win32Project1.obj : error LNK2001: unresolved external symbol _ThFileRd@8
1>Win32Project1.obj : error LNK2001: unresolved external symbol _.?AU_anc@8
1>Win32Project1.obj : error LNK2001: unresolved external symbol _ThFileWt@8
1>Win32Project1.obj : error LNK2001: unresolved external symbol _ThCopyNL@8
当我添加proc_ent P3 = { &P2, "Wibble", "ThWibble", ThWibble, NULL, NULL, TRACE, !COMPOS };
和相应的 THRCOMP 定义时得到了这个。
这几乎是我希望看到的,因为这些函数没有代码;但出乎意料的是最后一个函数的名称更改(显然从ThWibble
更改为.?AU_anc
)。
重新排列THRCOMP定义的顺序没有任何区别。
如果我注释掉 p3 和 p2,则名称更改将移至 p1:
1>Win32Project1.obj : error LNK2001: unresolved external symbol _ThFileRd@8
1>Win32Project1.obj : error LNK2001: unresolved external symbol _.?AU_anc@8
但是如果我更改定义以包含函数体,例如THRCOMP ThWibble(_anchor anch) {return 0;}
,代码编译时没有任何错误。 我正在使用VS2015社区,并将代码粘贴到Win32 DLL项目中。
我不知道_.?AU_anc@8
来自哪里,以及为什么这个值应该只对应于最后一个 pN 定义。 我会认为如果 p2 定义有问题,那么无论是否定义 p3,错误都会保留,同样,如果 p1 定义没有问题,当 p2 被注释掉时,它不会突然出错。
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- Visual Studio 2019在内置库中存在错误
- 以下 OpenCV 源代码中是否存在错误?(#ifdef 没有 #else)
- 在存在错误代码的情况下输出参数与 NRVO
- 为什么我的删除功能中存在错误
- 哪个编译器(如果有的话)在参数包扩展中存在错误
- 未知功能已经存在错误
- progam在std :: getline AM之后停止响应,代码中是否存在错误
- Netuseradd用户已经存在错误
- GCC 4.4.1是否存在错误,因为它不接受ctor初始值设定项中的注入类名
- Visual C++中的外部模板是否存在错误
- 类模板成员不存在错误
- 如果构造函数中存在错误,请停止进程
- purify中存在错误的内存泄漏
- C++中是否存在错误类型
- 来自 vtable 的未定义符号是否意味着接口和实现之间存在错误
- 为什么我遇到此代码的分段错误?此代码几乎没有运行,因此构造函数或复制构造函数中可能存在错误
- c ++ 11 参数包在 Apple LLVM 7.0.0 中存在错误行为,但适用于 GCC-5.1
- 文件输出中存在错误字符
- 在boost::mutex构造函数中同时写入同一内存区域可能存在错误