Matthieu M. がコメントで述べたように、動的ライブラリから読み込まれたシンボルのリストを取得するネイティブな方法はありません。
ただし、通常はこの回避策を使用します。これは、プラグインにコンテナー内のシンボルを宣言させ、メイン プログラムからこのコンテナーを取得することです。
plugin.h
#include <set>
#include <string>
// call this method from your main program to get list of symbols:
const std::set<std::string> & getSymbols();
void MySymbol01();
bool MySymbol02(int arg1, char arg2);
plugin.c
#include "plugin.h"
class SymbolDeclarator {
public:
static std::set<std::string> symbols;
SymbolDeclarator(const std::string & symbol) {
symbols.insert(symbol);
}
};
const std::set<std::string> & getSymbols() {
return SymbolDeclarator::symbols;
}
#define SYMBOL(RETURN, NAME) \
static const SymbolDeclarator Declarator##NAME(#NAME); \
RETURN NAME
SYMBOL(void, MySymbol01)() {
// write your code here
}
SYMBOL(bool, MySymbol02)(int arg1, char arg2) {
// write your code here
}
このソリューションには 2 つの問題しかありません。
- 非 const 静的変数を持つ:
symbols
plugin.c で宣言 -> 非スレッドセーフ。
- main() の前にコードを実行するため、ほとんどデバッグできません。