私は Linux 初心者で、ライブラリを Windows から Linux に移動しようとしています。ネイティブ バイナリ (mylib.so) ですが、mono ( [DllImport()] ) によって読み込まれます。このライブラリでは pcre (Perl 互換正規表現) を使用しています。.NET 実行可能ファイルが mylib.so を読み込もうとすると、例外がスローされます (lib が見つかりません)。私が設定したときMONO_LOG_LEVEL=debug
。私のライブラリが見つかったと言っていますが、pcre ライブラリは見つかりません。
動的にロードしようとしました ( dlopen(), dlsym()
)。ライブラリの実行可能バージョンを dl (-ldl) でリンクしてビルドすると、正常に動作します。しかし、モノラルからロードすると、SIGSEGV が得られました。
このライブラリを次のように作成します(dlを含むバージョンの場合):
g++ -fPIC -c *.cpp
g++ -shared -Wl,-soname,libmylib.so.1.1 -ldl -o libmylib.so.1.1 *.o
mylib.so and dl
(-l:libmylib.so.1.1 -ldl) にリンクする簡単なテスト プログラムを作成しましたが、動作します。
mylib を強制的に dl に (または直接 pcre に) リンクさせる必要があると思いますが、方法がわかりません。(可能だといいのですが)
私が望むのは、pcre を使用して mono で動作するライブラリを作成することだけです。