繁体   English   中英

使用程序集嵌入数据,对窗口使用mingw-w64编译时出现“未定义的引用”错误(COFF代替ELF)

[英]“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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM