いくつかの定義が でラップされた C++ ライブラリ コードがあるとしextern "C" { ... }
ます。
その C++ ライブラリを使用する C ライブラリ コードもあります。
私がやりたいことは、単一の .so ファイルを作成することですdlopen
。これにより、このライブラリの使用を開始するには を 1 回呼び出すだけで十分です。
これが私が今やっていることです:私は最初に私のC++ライブラリを.soファイルに.soファイルにコンパイルしています-shared -rdynamic -fPIC
. 次に、C ライブラリを同じパラメータで .so ファイルにコンパイルしています。その後、dload
C ライブラリをロードする前に C++ ライブラリをロードする必要があります。そうしないと、ロードがundefined symbol
エラーで失敗します。
私がやりたいことは、この 2 つのライブラリを 1 つの .so ファイルにコンパイルして、 を 1 回呼び出すだけdload
で十分に使用できるようにすることです。
どうやってやるの?
前もって感謝します。
編集: .o ファイルにコンパイルしてから結合してもうまくいきません。これが私がすることです:
- -fPIC パラメータを使用して、各ファイルをオブジェクト ファイルにコンパイルします。
- 私はそれらをリンクします
clang [list of object files] -shared -rdynamic -fPIC -o libmylib.so
- ロードしようとすると、
undefined symbol: __gxx_personality_v0
エラーが発生します。
EDIT2:ああ、私はそれをリンクするのを忘れましたlibstdc++
、それは今動作します。ありがとう。