Я портирую драйвер ODBC
с Windows
на Linux
.
Драйвер написан на C
.
ODBC
работает на Linux
, когда приложение выполняет вызов ODBC Manager (ODBCM
), который, в свою очередь, загружает соответствующий драйвер и передает вызов функции.
Предположим, мой драйвер, скомпилированный в общий объект, предоставляет две функции A
и B
.
Предполагается, что ODBCM
- это функция вызовов A
, а функция A
- это функция вызовов B
.
На самом деле происходит то, что когда функция A
вызывает функцию B
, а не функцию B'
(которая имеет то же имя, что и B
, находится в общем объекте libodbc
и загружается Linux
с использованием ODBC
приложения) вызывается.
Я чувствую, что должен быть либо флаг времени компиляции, либо инструмент модификации библиотеки после компиляции, который исправит эту проблему.
В настоящее время я перебираю библиотеку по одной функции за раз:
_B(){ // rename old functions
...
}
B() { // add new wrapper function
return _B(); // which just calls old
}
_A() {
...
_B(); // Change calls to renamed functions
...
}
Который медленно меняется и чувствует себя глупым.