私はからLinux
にODBC
ドライバを移植しています。
ドライバはC
で書かれています。
Linux
では、アプリケーションがODBCマネージャー(ODBCM
)を呼び出すと、適切なドライバーがロードされ、関数呼び出しが渡されるということがODBC
です。共有オブジェクトの関数名の衝突
私のドライバは、共有オブジェクトにコンパイルされ、A
とB
という2つの関数を公開しているものとします。
がコール機能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