0

私が取り組んでいるプログラムは、3rdPartyLibrary.lib に静的にリンクされています。

同じ 3rdPartyLibrary の新しいバージョン、たとえば 3rdPartyLibraryNewVersion.lib を利用したかったのです。

したがって、3rdPartyLibraryNewVersion.so を動的にリンクされたライブラリとして含めることを決定し、wrapper.so と呼ばれるラッパー動的ライブラリを介して含めます。3rdPartyLibrary の新しいバージョンと古いバージョンの両方を同時に使用したいと考えていますが、プログラムの別のパーティで使用します。

私たちが持っている解決策は、古い 3rdPartyLibrary を静的にリンクし、ラッパー ライブラリに動的にリンクして、同時に 3rdPartyLibraryNewVersion にリンクすることです。

プログラム --- 静的にリンク ---> 3rdPartyLibrary.lib. --- 動的にリンク --> wrapper.so --- 動的にリンク ---> 3rdPartyLibraryNewVersion.so.

これは可能ですか?

私たちが遭遇した問題は、wrapper.so がテスト実行可能ファイルで動作する一方で、3rdPartyLibrary.lib に静的にリンクされているプログラムからラッパーが呼び出されると、3rdPartyLibraryNewVersion.so 内で失敗することです。

私は何か悪いことをしましたか?

コードを 3rdPartyLibrary.lib に更新するのが正しい方法であることはわかっていますが、面倒です...

ありがとう、

ティム

4

1 に答える 1

0

あなたはそれがあなたのラッパースキームを使ってどのように失敗したかについて言及することを怠っています...

ただし、これを行うと、名前空間の衝突が発生し、失敗したり、予期しない動作をしたりする可能性があります。

あなたは正しいことを知っています:あなたのコードを更新してください。それが退屈すぎるなら、あなたのコードは努力する価値がないはずです。新しい機能を使用してコードを作成する必要がある場合は、更新する価値があります。最後に必要なのは、同じライブラリの2つの異なる互換性のないバージョンに縛られている状況を作成することです。後でそれを維持する必要がある場合は、自分を蹴ります。他の誰かがそれを維持しなければならない場合、彼らはあなたを追い詰めてあなたを殴ります。それを正しい方法で行います。

于 2009-06-10T18:22:41.950 に答える