dladdr を使用して、ライブラリへのフル パスを取得します。
Dl_info dl_info;
int ret = dladdr((void*)&func, &dl_info);
if (ret)
// use dl_info.dli_fname;
それは正常に動作します。ただし、ビルドでフォルダーの名前を変更すると (そして再度実行すると)、dli_fname にはフル パスが含まれず、ライブラリのファイル名のみが含まれます。何故ですか?
ビルド フォルダーの名前を変更する以外の手順は他にもありますが (さまざまな cmake の変更、主にインストール機能に関連する)、それでも問題は名前の変更後にのみ発生します (つまり、アプリケーションはビルド フォルダーからではなく実行されます)。