1

私はもともとLinuxで書いたプログラムを持っています.objcopyを使用して、実行時に使用する実行可能ファイル内にいくつかの画像を埋め込みます。Linuxではこれにまったく問題はなく、正常に動作します。

ただし、Windows 用のプログラムをクロス コンパイルしようとすると、リンク段階で未定義の参照のリストが表示され、objcopy が失敗していることがわかります。これを正しくクロスコンパイルするために、誰かが私を正しい方向に向けてください。コードは移植可能であるため、これはコードの問題ではないことはわかっています。

objcopy とのクロス コンパイルに使用されるコマンド

i586-mingw32msvc-objcopy --input binary --output=pe-i386 --binary-architecture i386 images/HD44780.bmp HD44780_bmp.o

リンク段階で発生するエラー

HDxx780.o:HDxx780.cpp:(.text+0xbe2): undefined reference to `__binary_images_HD44780_bmp_end'
HDxx780.o:HDxx780.cpp:(.text+0xbef): undefined reference to `__binary_images_HD44780_bmp_start'
HDxx780.o:HDxx780.cpp:(.text+0xc04): undefined reference to `__binary_images_HD44780_bmp_start'

データにアクセスするためにコード内にあるマクロ

extern char _binary_images_HD44780_bmp_start, _binary_images_HD44780_bmp_end;

#define HD44780_DATA ((void *) &_binary_images_HD44780_bmp_start)
#define HD44780_SIZE ((size_t) (&_binary_images_HD44780_bmp_end - &_binary_images_HD44780_bmp_start))

i586-mingw32-objcopy でサポートされている形式

me@mypc:~/ > i586-mingw32msvc-objcopy --info
BFD header file version (GNU Binutils) 2.20
pe-i386
(header little endian, data little endian)
  i386
pei-i386
(header little endian, data little endian)
  i386
elf32-i386
(header little endian, data little endian)
  i386
elf32-little
(header little endian, data little endian)
  i386
elf32-big
(header big endian, data big endian)
  i386
srec
(header endianness unknown, data endianness unknown)
  i386
symbolsrec
(header endianness unknown, data endianness unknown)
  i386
verilog
(header endianness unknown, data endianness unknown)
  i386
tekhex
(header endianness unknown, data endianness unknown)
  i386
binary
(header endianness unknown, data endianness unknown)
  i386
ihex
(header endianness unknown, data endianness unknown)
  i386

      pe-i386 pei-i386 elf32-i386 elf32-little elf32-big srec 
      i386 pe-i386 pei-i386 elf32-i386 elf32-little elf32-big srec 

      symbolsrec verilog tekhex binary ihex 
      i386 symbolsrec verilog tekhex binary ihex 

Windows(x86)にコンパイルしようとしています。コンパイルに使用するマシンは Linux (x86) です。

4

0 に答える 0