Сейчас на форуме: tyns777, cppasm, dutyfree, asfa (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Где находится тело функции в экзешнике?
Посл.ответ Сообщение

Ранг: 2.5 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 26 августа 2016 11:17 · Поправил: zaichik
· Личное сообщение · #1

Друзья!

Речь идёт о библиотеке [url=chilkat для mingw]https://www.chilkatsoft.com/downloads_mingw.asp[/url], использую mingw 4.6.2 Качаются как положено
1) Набор хидеров
2) Файл libchilkat-9.5.0.a
2) Файл libchilk_at9.5.0.dll


Вот минимальный код:
Code:
  1. //C++
  2. #include <CkImap.h>
  3.  
  4. int main (void)
  5. {
  6.     CkImap imap;
  7.     imap.UnlockComponent("Anything for 30-day trial");
  8. }

При компиляции по умолчанию компилятор ругается:

Code:
  1. [Linker error] undefined reference to `CkImap::UnlockComponent(char const*)'


Поэтому в командной строке компилятора добавляем опцию -lchilkat-9.5.0

Code:
  1. g++.exe <тут всякие другие опции> -lchilkat-9.5.0


Компилится, но ведь я так понимаю тут происходит именно связывание кода программы с кодом *.dll, то есть указание линковщику, в какой *.dll и по какому адресу лежит функция imap.UnlockComponent("Anything for 30-day trial");

И тут происходит необъяснимое. Готовый экзешник и экзешник МНОГО СЛОЖНЕЕ (это я для демонстрации такой маленький написал) работает БЕЗ libchilk_at9.5.0.dll ! То есть её можно переименовать, переместить, удалить... Работать сё равно будет! Так где же лежит код функции imap.UnlockComponent("Anything for 30-day trial")?

Можно предположить на худрой конец, что он где-то далеко-далеко в подсоединяемых хидерах, то есть фактически я компилю полностью сырцы. Но это не так, мы ведь видим, что линковщик не может найти тела этой функции и требует опцию -lchilkat-9.5.0

И вполне обходится без libchilk_at9.5.0.dll ! Чудеса какие-то. Может кто-нибудь объяснить? Спасибо, кто откликнется.

P.S. Спросил бы на WASMе, но он не работает. Не знаю, как правильно оформить ссылку на chilkat, извините уж.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 августа 2016 11:20
· Личное сообщение · #2

с чего вы взяли что происходит связывание с dll ?



Ранг: 2.5 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 26 августа 2016 11:27
· Личное сообщение · #3

reversecode пишет:
с чего вы взяли что происходит связывание с dll ?
Ну а что там происходит? Линковщик ругается, что тела функции он НЕ ВИДИТ. А где он его может найти? Либо в файлах *.o, либо в файлах *.dll




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 августа 2016 11:38
· Личное сообщение · #4

тоесть теперь вы начинаете активно гуглить и изучать что такое файлы *.a ?



Ранг: 2.5 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 26 августа 2016 11:48
· Личное сообщение · #5

reversecode пишет:
тоесть теперь вы начинаете активно гуглить и изучать что такое файлы *.a ?
Нет. Дело в том, что я раньше пытался это сделать несколко раз и ничё не находил. Ну как не находил- красивые надписи типа: "Всё о формате файлов *.a только у нас" были. А описания самого формата не было.

Но вернёмся к теме. Я так понимаю, вас совсем не удивляет, что тело функции находится не в *.dll; А где тогда?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 августа 2016 11:52 · Поправил: reversecode
· Личное сообщение · #6

так найдите и почитайте, о том что такое *.a файл
и не надо меня цитировать

Добавлено спустя 2 минуты
тема вообще не для этого форума, вам на форумы по программированию надо, там вас буду учить компилировать и объяснять как работает связывание



Ранг: 2.5 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 26 августа 2016 12:05
· Личное сообщение · #7

reversecode пишет:
тема вообще не для этого форума,
Тема для этого форума. Просто нужно сперва разобраться, где находится функция, которая отвечает за разблокирование библиотеки - (она именно за это и отвечает) Это глобальная цель. А потом и с функцией самой ковыряться.

Но я вас понял. Пробел в моих знаниях нашли. День не зря прошёл. Не беспокойтесь больше. Вопрос открыт.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 26 августа 2016 12:09
· Личное сообщение · #8

какой пробел? .а - это статическая либа, скорей всего. В ней и лежит реализация вашей функции.

-----
старый пень


| Сообщение посчитали полезным: zaichik


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 августа 2016 12:11
· Личное сообщение · #9

что нужно делать когда вам показали на ваш пробел ? и намекнули где он
правильно - заполнить его самому а не ждать пока вам его заполнит кто то

для этого человеку и нужен мозг, а не просто в него жрать (с)

Добавлено спустя 5 минут
r_e ты сломал зайчику механизм самообразования на корню ))))



Ранг: 2.5 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 26 августа 2016 12:21
· Личное сообщение · #10

reversecode пишет:
что нужно делать когда вам показали на ваш пробел ? и намекнули где он
А, то есть вы с самого начала предполагали, что код может находиться в файле *.a? Хорош советчик, ничё не скажешь... r_e вон сказал так сказал, без экивоков всяких.

| Сообщение посчитали полезным: olia64


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 26 августа 2016 12:22
· Личное сообщение · #11

я не предполагал, я знал
все кто пользуются gcc/g++ компиляторами это знают

Добавлено спустя 1 минуту
а вот вы даже читать не умеете, вам черным по серому сказали, перестаньте оверквотить



Ранг: 2.5 (гость), 1thx
Активность: 0.010
Статус: Участник

Создано: 26 августа 2016 12:27
· Личное сообщение · #12

reversecode пишет:
я не предполагал, я знал
все кто пользуются gcc/g++ компиляторами это знают
А я знал, что вы к словам придерётесь.

Я пользуюсь компилятором gcc/g++ и я не знал. Не было возможности узнать. Теперь вот столкнулся с этим ВПЕРВЫЕ и вот нарвался на вас. Мда...




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 26 августа 2016 12:44
· Личное сообщение · #13

не в тему форума, закрыто.

p.s. reversecode - правильно все говорит.

-----
[nice coder and reverser]



 eXeL@B —› Вопросы новичков —› Где находится тело функции в экзешнике?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати