いくつかの定義が でラップされた C++ ライブラリ コードがあるとしextern "C" { ... }ます。
その C++ ライブラリを使用する C ライブラリ コードもあります。
私がやりたいことは、単一の .so ファイルを作成することですdlopen。これにより、このライブラリの使用を開始するには を 1 回呼び出すだけで十分です。
これが私が今やっていることです:私は最初に私のC++ライブラリを.soファイルに.soファイルにコンパイルしています-shared -rdynamic -fPIC. 次に、C ライブラリを同じパラメータで .so ファイルにコンパイルしています。その後、dloadC ライブラリをロードする前に 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++、それは今動作します。ありがとう。