Общая библиотека с помощью динамически подключаемые функции, а не статически функции

Мы запрограммированы общая библиотека, которая используется как "выход пользователя" для сервера 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 и я снял, что это не после работы. Я должна была измениться, но я не вижу, что.

Почему статически функция не получить приоритет?

0
2019-09-18 11:30:28
источник
0 ответов

Посмотрите другие вопросы по меткам