zuuuuk
2 / 2 / 0
Регистрация: 05.01.2010
Сообщений: 185
|
||||||||||||||||
#1 | ||||||||||||||||
Как не линковать функцию? - C Linux30.11.2016, 15:34. Просмотров 306. Ответов 7
Метки нет Все метки)
(
Доброго времени суток .
Я построил простую программу и получил elf файл. Открывал я его
Я так понимаю они получат ссылку на реальный код при выполнении. Подскажите, а возможно в программе объявить функцию так что бы она была UND? те не определена.
0
|
|
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
|
30.11.2016, 15:34 |
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как не линковать функцию? (C Linux):
7
OpenIL как линковать - OpenGL Как линковать файлы на windows? - Assembler Как запретить линковать библиотеку? - C++ Qt как линковать библиотеки mingw, cygwin с vs? - C++ GCC как часть библиотек линковать статически, а часть динамически? - C++ qmake. Заставить GCC линковать статически - C++ Qt |
Вованя
|
|
30.11.2016, 16:36 | #2 |
zuuuuk, это не сама функция не определена, а её индекс в секции, то есть он будет известен во время выполнения , когда либа загрузится в адресное пространство процесса. А сделать её таковой можно объявив её как extern и реализовать её в отдельной либе.
0
|
Evg
![]() ![]() |
|
30.11.2016, 21:59 | #3 |
По readelf --symbols показывается только таблица символов. Строго говоря, полезно ещё смотреть выдачу по readelf --relocs, чтобы увидеть места использования этих символов
Если вопрос заключается в том, чтобы сделать что-то аналогичное тому, что ты видишь в readelf --symbols, то нужно описать внешнюю функцию и написать её использование (вызов или взятие адреса). Но где-то эта функция должна быть определена, в противном случае не отработает линковка, если рассматривать симметричный вариант, то "где-то" должно быть в динамической библиотеке Но в идеале бы услышать более внятную формулировку вопроса, чего конкретно ты хочешь
0
|
zuuuuk
2 / 2 / 0
Регистрация: 05.01.2010
Сообщений: 185
|
||||||
01.12.2016, 16:00 [ТС] | #4 | |||||
Эта функция будет подключена во время загрузки программы. Эта функция библиотечная.
я хочу понять механизм определения и подключения стандартных функций. что я вижу при компиляции и выполнении. 1) компилятор самостоятельно подключает стандартные библиотеки
0
|
Evg
![]() ![]() |
|
01.12.2016, 16:11 | #5 |
На этапе линковки компилятор получает объектный файл от твоей программы и динамическую библиотеку. Он видит, что в твоей программе есть обращение к, например, printf'у, видит, что в динамической библиотеке есть реализация printf'а и настроит исполняемый файл на то, чтобы динамический загрузчик связал всё это на этапе загрузки
0
|
zuuuuk
2 / 2 / 0
Регистрация: 05.01.2010
Сообщений: 185
|
||||||||||||||||
01.12.2016, 16:19 [ТС] | #6 | |||||||||||||||
Эта функция будет подключена во время загрузки программы. Эта функция библиотечная.
я хочу понять механизм определения и подключения стандартных функций. что я вижу при компиляции и выполнении. 1) компилятор самостоятельно подключает стандартные библиотеки
2) получаю elf файл в котором нет текстовой реализации стандартных функций. но есть секция в которой они обозначены, что они есть и должны быть подключены. вот.....
потому что если я подключаю свои функции, то он требует их реализацию. а реализация функции printf не находиться в моем elf файле. она находиться в GLIBC_2.0 А возможно ли , что бы в место R_386_JUMP_SLOT 00000000 printf стояла моя функция? и указать системе на мою библиотеку myGLIBC_xx и как это можно сделать?
0
|
zuuuuk
2 / 2 / 0
Регистрация: 05.01.2010
Сообщений: 185
|
|
02.12.2016, 16:36 [ТС] | #8 |
спасибо я разобрался.
программа при запуске начинает искать библиотеки в переменных системы и может найти мою библиотеку.
0
|
02.12.2016, 16:36 | |
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
|
02.12.2016, 16:36 |
Привет! Вот еще темы с ответами:
8
Перегрузка операций (Создать класс вещественных чисел (double); определить оператор +, как функцию-элемент и – как дружественную функцию) - C++
Как превратить символьное выражение в функцию от n-ного количества переменных в функцию f=@ (x, y,. . . . ) - Matlab Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |