在另一个Stackoverflow Q/A中有post that showed how to embed arbitrary data in assembly and reference it in C++。当使用汇编嵌入数据时,使用mingw-w64编译窗口(COFF代替ELF)时出现“Undefined reference”错误
这在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” 显然是全球/ EXTERN和我m使用“.type 50”作为数据,因为“50”是字符数组的值,并且我使用“.type 15”作为data_size,因为“15”是无符号long的值(所有这些如specified here))
我仍然使用相同的头文件以引用数据:
// 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'的未定义引用),链接器就会出现问题。
有关如何解决此问题的任何想法/解决方案?我已经检查过了,编译汇编代码生成的目标文件包含在链接步骤中。
哇,这个技巧(外部块和前缀“_”到变量名称在asm中)。谢谢一堆! –