objcopyを使ったリソースの埋め込みについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ma2

objcopyを使ったリソースの埋め込みについて

#1

投稿記事 by ma2 » 10年前

Win7環境で、gccとMinGWとSDL(libsdl)を使いプログラムを作っています。
件名にも、挙げた画像などリソースを実行ファイルに埋め込みたいのですが、うまくいかず書き込みをしました。

makefile

コード:

CC		= gcc
CFLAGS	= -O2 -I./SDL/include
LIBS	= -L./SDL/lib/x86 -lmingw32 -I/usr/include/w32api -mno-cygwin -mwindows
TARGET	= ExamSDL02
OBJS	= main.o
RESOURCE= chr.o

SDL		= -lSDLmain -lSDL.dll -lSDL_image -lSDL_ttf -lSDL_gfx

all:	$(TARGET) $(RESOURCE)

$(TARGET):	$(OBJS)
	$(CC) -o $(TARGET) -Wall -lm $(OBJS) $(LIBS) $(SDL)

$(RESOURCE):
	objcopy -I binary -O elf32-i386 -B i386 chr.png chr.o

clean:
	rm -f *.o

.c.o:
	$(CC) $(CFLAGS) -c $<
main.c

コード:

#include <SDL.h>
#include <SDL_image.h>

extern char _binary_chr_png_start[];
extern char _binary_chr_png_end[];
extern char _binary_chr_png_size[];

//const char *start = _binary_chr_png_start;	// データの先頭のアドレスを取得
//const char *end = _binary_chr_png_end;		// データの末尾のアドレス + 1 を取得
//int size = (int)_binary_chr_png_size;		// データのサイズを取得

int main( int argc, char* argv[] )
{
	SDL_Init( SDL_INIT_EVERYTHING );

//	printf( "Start:%d\n", &_binary_chr_png_start[0] );

	SDL_Quit();
	return 0;
}
makefile内のRESOURCEにいる、chr.pngをmain.c側からアクセスしたいのですが、main.cの、8行、9行、10行と、16行を有効すると、
makeでundefined reference to `_binary_chr_png_start' 等のエラーが出ます。
お力添え、お願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: objcopyを使ったリソースの埋め込みについて

#2

投稿記事 by h2so5 » 10年前

この書き換えでどうでしょうか。

コード:

all:    $(TARGET) $(RESOURCE)
 
$(TARGET):  $(OBJS)
    $(CC) -o $(TARGET) -Wall -lm $(OBJS) $(LIBS) $(SDL)
 

コード:

all:    $(TARGET)
 
$(TARGET):  $(OBJS) $(RESOURCE)
    $(CC) -o $(TARGET) -Wall -lm $(OBJS) $(RESOURCE) $(LIBS) $(SDL)

コード:

extern char _binary_chr_png_start[];
extern char _binary_chr_png_end[];
extern char _binary_chr_png_size[];
 

コード:

extern const char _binary_chr_png_start[] asm("_binary_chr_png_start");
extern const char _binary_chr_png_end[]   asm("_binary_chr_png_end");
extern const char _binary_chr_png_size[]  asm("_binary_chr_png_size");
参考: c++ - Including binary blob from objcopy in both MinGW 32 and 64 - Stack Overflow

ma2

Re: objcopyを使ったリソースの埋め込みについて

#3

投稿記事 by ma2 » 10年前

h2so5 さん
あっさり通すことができました。
ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る