Общая библиотека с помощью динамически подключаемые функции, а не статически функции
Мы запрограммированы общая библиотека, которая используется как "выход пользователя" для сервера cmod в компании IBM (по требованию) с помощью GCC. Наша общая библиотека называется сервером cmod в случае необходимости. Cmod в представляется использовать версию завить, что не с помощью OpenSSL. Наша общая библиотека должна использовать версию завиток с OpenSSL и так я связала нужный завиток версия статически в мою общую библиотеку. Когда наша общая библиотека называется cmod в версии cmod в функции curl-это называется, а не статически и близких.
Я не эксперт по Linux и таким образом пытался проверить, какой код на самом деле будет вызван демпингом указателей на функции. Кажется, что curl_version не используется cmod В и, таким образом, статически слинкованную версию вызывается, но для curl_easy_init версия cmod в вызывается. Это подтверждается и завить отладки обратного вызова.
В curl_easy_init функция, представляется статически, в общей библиотеке (arsusec)
[<ourserver> ~/ondemand-userexit]$ nm dist/CentOS/arsusec | grep easy_init
0000000000010040 T curl_easy_init
Поэтому напишу следующее указателей на функции в файл:
CURL * dafo_InitAuthentication(struct DafoLogger *logger, UBYTE sslVersion, BYTE *cert, BYTE *url, UWORD timeout_s,
BOOL outputVerbose) {
FILE *pFile = NULL;
curlLogger = logger;
pFile = fopen("/tmp/mau/gugus.txt", "a");
fprintf(pFile, "Adresse init auth: %%p / curl version: %%p / easy init: %%p\n", &dafo_InitAuthentication, &curl_version, &curl_easy_init);
fclose(pFile);
CURL *curlHandle = curl_easy_init();
Когда я называю этот код как отдельную программу, я получаю:
Adresse init auth: 0x406df0 / curl version: 0x408920 / easy init: 0x40a850
Поэтому мне кажется, что все выполняется в одном адресном пространстве и, следовательно, ни общая участвует библиотека.
При использовании общей библиотеки в cmod в контексте я получаю:
Adresse init auth: 0x7f13a6dd5998 / curl version: 0x7f13a6dd8110 / easy init: 0xa29fcd
Так вот мои собственные функции и curl_version кажется работать в пространстве библиотеки, но curl_easy_init, кажется, бежит в пространстве cmod в сервер.
Моя гипотеза была подтверждена и что-то писать в тот же файл в curl_easy_init (= я изменил curl_easy_init), который записывается в автономном случае, но не в случае cmod в.
Самое странное то, что я заставил его работать правильно, но поскольку у меня были некоторые тестовый код, встроенный в curl_easy_init и я снял, что это не после работы. Я должна была измениться, но я не вижу, что.
Почему статически функция не получить приоритет?