GCC

Материал из Xgu.ru

Перейти к: навигация, поиск


Содержание

[править] Вопросы и ответы

[править] Как собрать разделяемую библиотеку (.so)?

$ gcc -c -fPIC calc_mean.c -o calc_mean.o    
$ gcc -shared -Wl,-soname,libmean.so.1 -o libmean.so.1.0.1  calc_mean.o

Просмотреть, какие функции есть в разделяемой библиотеке можно с помощью nm:

$ nm -D libmean.so.1.0.1

Подробнее:

[править] В чём разница между LD_LIBRARY_PATH и LIBRARY_PATH?

LD_LIBRARY_PATH используется на этапе исполнения, а LIBRARY_PATH на этапе сборки[1].

[править] Как изнутри программы увидеть, с какими опциями она была скомпилирована?

Напрямую это сделать невозможно, но косвенно это можно сделать вполне.

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

Например:

 -DFLAGS=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\"

Или просто создать заголовочный файл, в котором соответствующий макрос будет описываться.

Начиная с версии 4.3 можно использовать ключ -frecord-gcc-switches, который создаёт в генерируемом объектном файле соответствующую секцию[2].

$ gcc -O2 -frecord-gcc-switches a.c
$ readelf -p .GCC.command.line a.out 

String dump of section '.GCC.command.line':
  [     0]  a.c
  [     4]  -mtune=generic
  [    13]  -march=x86-64
  [    21]  -O2
  [    25]  -frecord-gcc-switches

Прочитать ELF-данные программа напрямую сама не может, но косвенно может. Подробнее:

[править] Как сделать gcc перемещаемым? (relocatable)

http://forward-in-code.blogspot.de/2014/11/relocating-gcc.html

[править] Примечания

  1. http://stackoverflow.com/questions/4250624/ld-library-path-vs-library-path
  2. http://gcc.gnu.org/ml/gcc-patches/2006-12/msg00211.html — сообщение в списке рассылки gcc о добавлении ключа -frecord-gcc-switches

[править] Компиляция, линковка, сборка

Источник — «http://xgu.ru:81/wiki/GCC»