GCC (minGW - Windows 10) сообщает, что нет ссылки на символ, определенный в файле .o, когда я пытаюсь встроить двоичный файл в исполняемый файл - PullRequest
0 голосов
/ 19 декабря 2018

создание .o файла

ld -r -b binary -o baked.o baked.txt

λ nm baked.o
0000000f D _binary_baked_txt_end
0000000f A _binary_baked_txt_size
00000000 D _binary_baked_txt_start

Код:

#include <stdlib.h>
#include <stdio.h>

extern char *_binary_baked_txt_end;
extern char _binary_baked_txt_size;
extern char *_binary_baked_txt_start;

int main(void) {      
  printf("the baked is %s", _binary_baked_txt_start);      
  return 0;
}

компиляция:

λ gcc -o main baked.o main.c
C:\Users\566\AppData\Local\Temp\cc4um6Mn.o:main.c:(.text+0x12): undefined reference to `_binary_baked_txt_start'
collect2.exe: error: ld returned 1 exit status

Вопросчто я делаю не так?Я вижу символы в файл .o, я компилирую его с файлом main.c, что может пойти не так?

1 Ответ

0 голосов
/ 19 декабря 2018

Я должен использовать только:

binary_baked_txt_end;
binary_baked_txt_size;
binary_baked_txt_start;

из-за формата COFF на машинах с Windows.и правильный способ сделать это будет:

extern char binary_baked_txt_end[];
extern char binary_baked_txt_size;
extern char binary_baked_txt_start[];

, потому что таким образом ясно, что binary_baked_txt_end - это адрес, который указывает на символ (в моем случае), и он будет безопаснее, никто не выиграл »не сможет присвоить ему новое значение.

...