Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > GNU toolchain > GCC: как отключить определенный ворнинг


Автор: Alca 20.1.2011, 18:17
Например, такой:
Код

the `gets' function is dangerous and should not be used.

Автор: boostcoder 20.1.2011, 18:44
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

Автор: Alca 20.1.2011, 19:21
и какому ключу соотв. этот ворнинг?

Автор: Alca 1.2.2011, 22:42
 smile 

Автор: Alca 16.2.2011, 15:16
Хочу избавиться от этого:
Цитата

Description    Resource    Path    Location    Type
Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C    C/C++ Problem
Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C    C/C++ Problem
Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C  line 0    C/C++ Problem
Using 'gethostbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C    C/C++ Problem
Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C    C/C++ Problem
Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C    C/C++ Problem
Using 'getservbyname' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking    C    C/C++ Problem


Автор: bsa 28.2.2011, 00:52
Alca, думаю, что это предупреждение не gcc, а линкера.

Автор: Alca 3.3.2011, 13:02
Цитата

предупреждение не gcc, а линкера.

мои действия?

Автор: Alca 11.3.2011, 18:46
Как вариант:
Код

g++ tmpnam.cc 2>&1 | grep -v "'tmpnam' is dangerous"

Автор: bsa 22.4.2011, 19:33
Alca, думаю тебе не стоит линковать статически, так как все равно идет подключение динамической библиотеки.
А ругань на gets вполне оправдана. Лучше замени на fgets(buf, size, stdin).

Автор: Alca 22.4.2011, 20:17
Цитата

думаю тебе не стоит линковать статически, так как все равно идет подключение динамической библиотеки.

Я ж не против, а остальные либы (-lmysqlclient -lm -lpthread -lcrypt -lz -lssl -lcrypto -lpcre) мне тоже прийдется динамически подключать?

Makefile:
Код

BINS            = cron in.cgi out.cgi builder chgr unit_tests  #pcredemo #test test1 test2
CRON_OBJS       = cron.o log.o util.o parser.o base64.o gz.o crypt.o
IN_OBJS         = in.o log.o util.o parser.o cgi.o cgl.o base64.o crypt.o
OUT_OBJS        = out.o log.o util.o parser.o cgi.o cgl.o base64.o crypt.o
CHGR_OBJS       = chgr.o util.o log.o base64.o itab.o crypt.o
BUILDER_OBJS    = builder.o base64.o util.o log.o crypt.o
UNIT_TESTS_OBJS = unit_tests.o base64.o util.o log.o crypt.o itab.o
TEST_OBJS       = test.o
TEST1_OBJS      = test1.o
TEST2_OBJS      = test2.o
PCREDEMO_OBJS   = pcredemo.o
CC              = gcc 
CFLAGS          = -Wall -O3 -static -pthread -g0 -s #-g 
INCLUDES        = -I. -I.. -I/usr/local/crystal_trader2.5/include -I/usr/local/crystal_trader2.5/include/ImageMagick -I/usr/local/include -I/usr/include
LDFLAGS         = -L/usr/local/crystal_trader2.5/lib -L/usr/local/crystal_trader2.5/lib/mysql -L/usr/local/crystal_trader2.5/lib/ImageMagick -L/usr/local/lib -L/usr/lib -L/usr/lib/mysql -L/usr/local/lib/mysql
LIBS            = -lmysqlclient -lm -lpthread -lcrypt -lz -lssl -lcrypto -lpcre
LIBS1           = $(LIBS) -lGeoIP


all:        $(BINS)
                
cron:        $(CRON_OBJS)
                $(CC) $(CFLAGS) $(LDFLAGS) $(CRON_OBJS) $(LIBS1) -o $@

in.cgi:     $(IN_OBJS)
                $(CC) $(CFLAGS) $(LDFLAGS) $(IN_OBJS) $(LIBS1) -o $@

out.cgi:    $(OUT_OBJS)
                $(CC) $(CFLAGS) $(LDFLAGS) $(OUT_OBJS) $(LIBS1) -o $@

builder:    $(BUILDER_OBJS)
                $(CC) $(CFLAGS) $(LDFLAGS) $(BUILDER_OBJS) -lpcre -lcrypto -lm -o builder 
                
chgr:       $(CHGR_OBJS)
                $(CC) $(CFLAGS) $(LDFLAGS) $(CHGR_OBJS) $(LIBS) -lcurl -lcares -lgd -ljpeg -lz -lm -lpthread -ldl -lrt -o $@

unit_tests: $(UNIT_TESTS_OBJS) 
                $(CC) $(CFLAGS) $(LDFLAGS) $(UNIT_TESTS_OBJS) $(LIBS) -o unit_tests

.c.o:
                $(CC) $(INCLUDES) $(CFLAGS) $? -c $<

clean:
                rm -f *.d *.o $(BINS)

Автор: bsa 24.4.2011, 22:39
Alca, а их тебе никто не мешает подключать статически - просто указывай вместо -lmysqlclient что-то вроде "/usr/lib/libmysqlclient.a" (т.е. файл статической библиотеки полностью с путем"

Хотя я не понимаю, зачем ты делаешь статическую сборку под *nix... Я бы понял, если бы линковал с чем-то пропроетарным, но со свободными (даже системными: -lm, -lz) - это уже перебор.

Автор: Alca 24.4.2011, 23:22
Цитата

 бы понял, если бы линковал с чем-то пропроетарным

OpenSSL, например

Автор: bsa 26.4.2011, 17:58
В целях безопасности? Тогда понимаю.
Но вот статически линковать libc для этого совсем нет необходимости.

Автор: Alca 26.4.2011, 20:54
а как мне залинковать все статически, кроме libc? Не врубляюсь.

Автор: bsa 26.4.2011, 21:48
Alca, я же тебе сказал. 
Цитата
LDFLAGS         = -L/usr/local/crystal_trader2.5/lib -L/usr/local/crystal_trader2.5/lib/mysql -L/usr/local/crystal_trader2.5/lib/ImageMagick -L/usr/local/lib -L/usr/lib -L/usr/lib/mysql -L/usr/local/lib/mysql
LIBS            = -lmysqlclient /usr/lib/libssl.a /usr/lib/libcrypto.a /usr/lib/libpcre.a /usr/lib/libGeoIP.a -lm -lz -lpthread


Автор: Alca 26.4.2011, 22:13
Спасибо, завтра попробую

Автор: Alca 27.4.2011, 10:47
И здесь убрать -static?
Код

CFLAGS          = -Wall -O3 -static -pthread -g0 -s #-g 

Автор: bsa 27.4.2011, 11:32
Alca, конечно

Автор: Alca 27.4.2011, 11:43
Убрав только -static, ворнинги исчезли:
Код

CFLAGS          = -Wall -O3 -pthread -g0 -s #-g 
...
LIBS            = -lmysqlclient -lm -lpthread -lcrypt -lz -lssl -lcrypto -lpcre
LIBS1           = $(LIBS) -lGeoIP


Зачем тогда это?
Код

LIBS            = -lmysqlclient /usr/lib/libssl.a /usr/lib/libcrypto.a /usr/lib/libpcre.a /usr/lib/libGeoIP.a -lm -lz -lpthread

Автор: bsa 27.4.2011, 12:07
ты же хотел линковать статически ряд либ, за исключением libc! Я тебе показал как их линковать.

Автор: Alca 27.4.2011, 12:13
Код

CFLAGS = -Wall -O3 -pthread -g0 -s #-g 
...
#LIBS   = -lmysqlclient -lm -lpthread -lcrypt -lz -lssl -lcrypto -lpcre
LIBS      = -lmysqlclient /usr/lib/libssl.a /usr/lib/libcrypto.a /usr/lib/libpcre.a -lm -lz -lpthread
LIBS1    = $(LIBS) /usr/lib/libGeoIP.a

Правильно?

Автор: bsa 28.4.2011, 11:07
Alca, и? что не понятно?

Автор: Alca 21.12.2011, 19:06
http://www.trilithium.com/johan/2005/06/static-libstdc/

Автор: sybot 30.9.2012, 18:11
still actual

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)