ODBC
드라이버를 Windows
에서 Linux
으로 이식하는 중입니다.
드라이버는 C
로 작성되었습니다.
에서 ODBC
이 작동하는 방식은 응용 프로그램이 적절한 드라이버를로드하고 함수 호출을 전달하는 ODBC 관리자 (ODBCM
)를 호출한다는 것입니다.공유 객체의 함수 이름 충돌
공유 객체로 컴파일 된 내 드라이버는 A
과 B
의 두 가지 기능을 제공한다고 가정합니다.
은 호출 기능이 A
이고, 기능이 A
인 것은 호출 기능이 B
입니다. 실제로 무슨 일이 일어나고 무엇
기능 A
호출이 함수 대신 B'
B
를 작동 할 때 (B
같은 이름을 가진는 libodbc
공유 객체에 위치하고 있으며 ODBC
응용 프로그램을 사용 Linux
에 의해로드)가 불려 갔을 것입니다.
나는이 문제를 해결할 수있는 컴파일 타임 플래그 또는 포스트 컴파일 라이브러리 수정 도구가 있어야한다고 생각합니다. 현재
나는 다음과 같은 일을 한 번에 라이브러리를 하나 개의 함수를 통해 갈거야 : 변경 느리고 미봉책 느낌
_B(){ // rename old functions
...
}
B() { // add new wrapper function
return _B(); // which just calls old
}
_A() {
...
_B(); // Change calls to renamed functions
...
}
합니다.
이 문제가 해결되었습니다. 수동으로 함수 이름을 변경하고 래퍼를 작성하는 데 수 시간의 시간을 절약 해 주셔서 감사합니다. – TheGeneral
"링크 타임에 모든 라이브러리 내부 심볼을 바인딩하는"의미와이 문제를 해결하는 방법에 대해 설명해 주시겠습니까? 이 플래그가 공유 라이브러리에서 정적 링크를 야기한다고 말하는 것 같습니다. 맞습니까? 그리고이 플래그와 연결된 프로그램은 런타임에 공유 라이브러리에 액세스 할 필요가 없습니까? 내가 답장을하기 전에 이것을 알아 내면 편집을 추가 할 것입니다. 감사. – Praxeolitic