在另一个Stackoverflow Q / A中有一个post that showed how to embed arbitrary data in assembly and reference it in C++。
这在Linux中工作正常,但在编译Windows时(使用mingw-w64),程序集必须不同,因为可执行文件使用的是COFF格式而不是ELF。
我当前用于嵌入数据的程序集如下(对于COFF):
const int trigger_pin_1 = 12;
const int echo_pin_1 = 13;
const int trigger_pin_2 = 11;
const int echo_pin_2 = 10;
(我正在使用“.scl 2”,因为存储类“2”显然是全局/外部的,我使用“.type 50”表示数据,因为“50”是字符数组的值,我正在使用“.type 15”作为data_size,因为“15”是无符号长整数的值(所有这些都作为specified here))
我仍然使用相同的头文件来引用数据:
# 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
程序集编译良好,程序的其余部分也是如此。链接时出现问题,链接器声称data_bin和data_bin_size未定义,即使我在汇编代码中定义它们(未定义引用'data_bin')。
有关如何解决此问题的任何想法/解决方案?我已经仔细检查了,编译汇编代码生成的目标文件包含在链接步骤中。
答案 0 :(得分:0)
在data.hpp周围添加extern "C" { }
(在linux中,变量名称不会被破坏,但在windows中,它们都是)
也许,你需要在asm中为变量名前置“_”。