![](/img/trans.png)
[英]Compiling Qt5 hello world .cpp file under Windows using MinGW-w64 gives “undefined reference” error
[英]“Undefined reference” error when using assembly to embed data, using mingw-w64 compiling for windows (COFF instead of ELF)
在不同的Stackoverflow Q / A中,有一篇文章显示了如何在程序集中嵌入任意数据并在C ++中对其进行引用 。
这在Linux上可以正常工作,但是在Windows(使用mingw-w64)进行编译时,程序集必须有所不同,因为可执行文件使用的是COFF格式而不是ELF。
我当前用于嵌入数据的程序集如下(对于COFF):
# data.asm
.section .rodata
.global data_bin
.def data_bin; .scl 2; .type 50; .endef
.align 4
data_bin:
.incbin "dataFile"
data_bin_end:
.global data_bin_size
.def data_bin_size; .scl 2; .type 15; .endef
.align 8
data_bin_size:
.quad data_bin_end - data_bin
(我使用“ .scl 2”,因为存储类“ 2”显然是全局/外部的,并且我在数据中使用“ .type 50”,因为“ 50”是字符数组的值,而我'为data_size使用“ .type 15”作为“ 15”是无符号long的值(所有这些都在这里指定 )
我仍在使用相同的头文件来引用数据:
// data.hpp
#ifndef DATA_ASM_HPP
#define DATA_ASM_HPP
extern const char data_bin[];
extern const unsigned long long data_bin_size;
#endif
程序集可以正常编译,其余程序也可以。 链接时出现问题,链接器声称data_bin和data_bin_size是未定义的,即使我在汇编代码中定义了它们(未定义对“ data_bin”的引用)。
关于如何解决此问题的任何想法/解决方案? 我已经仔细检查过,链接步骤中包含了通过编译汇编代码生成的目标文件。
在data.hpp周围添加extern "C" { }
(在Linux中,变量名不乱码,但在Windows中,它们是乱码)
也许,您需要在asm中的变量名前加上“ _”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.