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
Подробнее:
- [1].
- Shared Library Minitutorial (англ.)
- Shared Libraries in Program Library Howto (англ.)
[править] В чём разница между LD_LIBRARY_PATH и LIBRARY_PATH?
LD_LIBRARY_PATH используется на этапе исполнения, а LIBRARY_PATH на этапе сборки[1].
[править] Как изнутри программы увидеть, с какими опциями она была скомпилирована?
Напрямую это сделать невозможно, но косвенно это можно сделать вполне.
Самый простой способ, это установить макрос, в котором будут все флаги компиляции (кроме самого этого макроса, конечно же).
Например:
-DFLAGS=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\"
Или просто создать заголовочный файл, в котором соответствующий макрос будет описываться.
- Get the compiler options from the program (англ.)
- Detect GCC compile-time flags of a binary (англ.)
- Get the compiler options from a compiled executable? (англ.)
Начиная с версии 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
[править] Примечания
- ↑ http://stackoverflow.com/questions/4250624/ld-library-path-vs-library-path
- ↑ http://gcc.gnu.org/ml/gcc-patches/2006-12/msg00211.html — сообщение в списке рассылки gcc о добавлении ключа -frecord-gcc-switches