LoginSignup
prajoy
@prajoy

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

gccで2GB以上のメモリを確保したい

解決したいこと

makeをしようとしたところ,以下のエラーが発生しました.
原因はmakeの際に2GB以上のメモリを確保できていないことだと分かったのですが,gccのどのオプションをmakefike上のどこに記述すれば良いか分かりません.
解決策を教えて頂ければ幸いです.

発生している問題・エラー

hoge.o: In function `read_image':
/home/~/~/hoge.c:500:(.text+0xe8b): relocation truncated to fit: R_X86_64_PC32 against symbol `tfSamplesPerPixel' defined in COMMON section in hoge3.o
…
hoge.o: In function `pose':
/home/~/~/hoge.c:601:(.text+0x1740): relocation truncated to fit: R_X86_64_PC32 against symbol `dimg2' defined in COMMON section in hoge.o
…
hoge.o: In function `read_mask':
/home/~/~/hoge.c:635:(.text+0x1906): relocation truncated to fit: R_X86_64_PC32 against symbol `fnamec' defined in COMMON section in hoge.o
…
/home/~/~/hoge.c:699:(.text+0x1d60): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status
makefile:14: recipe for target 'hoge' failed
make: *** [hoge] Error 1

該当するソースコード

CC= gcc -g

TARGET = hoge
INCDIR = /usr/include
LIBDIR2 = /usr/X11/lib
XLIBS = -lX11 -lXext 
GL_LIBS = -L/usr/lib  -lglut -lGLU -lGL -lm $(XLIBS)
TIF_LIBS = -ltiff -ljpeg -lz -lpng

H1 = header1.h header2.h
OBJ = hoge.o hoge1.o hoge2.o hoge3.o 

$(TARGET) : $(OBJ)
	$(CC) -o $@ -I$(INCDIR) $(OBJ) $(GL_LIBS) $(TIF_LIBS)

hoge.o : $(H1) hoge.c
	$(CC) -c  -I$(INCDIR) hoge.c 

hoge1.o : hoge1.c
	$(CC) -c  hoge1.c 

hoge2.o : hoge2.c
	$(CC) -c  hoge2.c 

hoge3.o : hoge3.c
	$(CC) -c  hoge3.c 

clean :
	$(RM) *.o
	$(RM) hoge

バージョン

gcc 7.5.0(Ubuntu 7.5.0-3ubuntu1~18.04)
make GNU Make 4.1
ubuntu 18.04

0

1Answer

手元の環境で同じ現象が起こらないので、本当に効果があるか分からないですが、-mcmodel=largeのオプションを追加したら改善しないでしょうか。
#でコメントしたところが追加箇所です。

CC= gcc -g

TARGET = hoge
INCDIR = /usr/include
LIBDIR2 = /usr/X11/lib
XLIBS = -lX11 -lXext 
GL_LIBS = -L/usr/lib  -lglut -lGLU -lGL -lm $(XLIBS)
TIF_LIBS = -ltiff -ljpeg -lz -lpng
ADD_FLAG = -mcmodel=large    # 追加

H1 = header1.h header2.h
OBJ = hoge.o hoge1.o hoge2.o hoge3.o 

$(TARGET) : $(OBJ)
	$(CC) -o $@ -I$(INCDIR) $(OBJ) $(GL_LIBS) $(TIF_LIBS)

hoge.o : $(H1) hoge.c
	$(CC) -c  -I$(INCDIR) hoge.c 

hoge1.o : hoge1.c
	$(CC) -c  hoge1.c $(ADD_FLAG)    # 一部追加

hoge2.o : hoge2.c
	$(CC) -c  hoge2.c $(ADD_FLAG)    # 一部追加

hoge3.o : hoge3.c
	$(CC) -c  hoge3.c $(ADD_FLAG)    # 一部追加

clean :
	$(RM) *.o
	$(RM) hoge

C++のコードですが、以下参考にしました。
https://doridoridoriand.hatenablog.jp/entry/2015/08/26/183700

1

Comments

  1. @prajoy

    Questioner
    こちらで無事make出来ました.ご教授頂きありがとうございました!

Your answer might help someone💌