LINUX.ORG.RU

Как влючить вывод лога динамической библиотеки?

 ,


1

1

Собственно есть динамическая библиотека которую собралл с исходников j2534.so.В ней есть возможность включить вывод лога но за неимением знаний и незнанием языка я не понимаю как это сделать.

Ссылка на исходники GitHub NikolaKozina/j2534

Вот что пишет в j2534.с:

«To enable runtime debug logging to the file /tmp/op.log, create an environment variable with the name LOG_ENABLE and set it to a non-zero value.»

У меня есть некая программа которая подключает .so библиотеку с помощью dlopen и вытягивает функции.

#include <stdio.h>
#include <stdlib.h>   
#include <dlfcn.h>


long unsigned int* pDeviceID;
void *dlopen (const char *filename, int flag);
void *library_handler;
long(*PassThruOpen)(const void* , unsigned long*);
char *error;

int main(void)                 // определяем функцию main

{

if (!library_handler){
//если ошибка, то вывести ее на экран
fprintf(stderr,"dlopen() error: %s\n", dlerror());
 // в случае ошибки можно, например, закончить работу программы
};

PassThruOpen = (long (*)(const void* , unsigned long*)) dlsym(library_handler, "PassThruOpen");

error = dlerror();

if (error != NULL) {
    fprintf(stderr, "%s\n", error);
}

PassThruOpen(NULL,pDeviceID);

printf("OK!");                 // выводим строку на консоль
return 0;                     // выходим из функции

}

Но как через нё включить вывод лога не понмаю(

Ответ на: комментарий от DavidBejenar

А куда это писать и как библиотека поймет это!?

Надо определить переменную LOG_ENABLE=1, это надо либо в консоле сделать как указал xDShot либо, внести в конфиг bash/csh/zsh -нужное подчеркнуть. Библиотека читает эту переменную см. пункт 241 исходников библиотеки.

Silerus ★★★ ()

Не хочу никаким образом обидеть, то имеет смысл хоть немного разобраться что ты вообще делаешь, хотя бы до такой степени, что это перестанет быть похожим на магию. Потрать неделю на первые главы K&R и разберись заодно что такое динамическая линковка.

anonymous ()

Используй поиск по исходникам в следующий раз https://github.com/NikolaKozina/j2534/search?q=LOG_ENABLE&unscoped_q=LOG_ENABLE там видно что берётся из getenv иногда включение отладки идёт на уровне компиляции и надо добавлять при сборке -DLOG_ENABLE которое станет в исходнике #define LOG_ENABLE в этом случае если посмотреть в исходники по ключевому слову будет #ifdef LOG_ENABLE или #defined(LOG_ENABLE)

LINUX-ORG-RU ★★★★ ()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)