0

dladdr を使用して、ライブラリへのフル パスを取得します。

Dl_info dl_info;
int ret = dladdr((void*)&func, &dl_info);
if (ret)
            // use dl_info.dli_fname;

それは正常に動作します。ただし、ビルドでフォルダーの名前を変更すると (そして再度実行すると)、dli_fname にはフル パスが含まれず、ライブラリのファイル名のみが含まれます。何故ですか?

ビルド フォルダーの名前を変更する以外の手順は他にもありますが (さまざまな cmake の変更、主にインストール機能に関連する)、それでも問題は名前の変更後にのみ発生します (つまり、アプリケーションはビルド フォルダーからではなく実行されます)。

4

1 に答える 1

0

dl_info.dli_fname には、常に Android のフル パスが含まれているとは限りません ( こちらを参照)

これはこの場合の回避策です: 私の答えを見てください

于 2019-02-19T10:36:13.343 に答える