私は基本的に、ASIO ドキュメントのシリアル化の例に基づいて共有ライブラリを構築しています。つまり、-shared および -fpic オプションを使用してコンパイルし、フック/ラッパーを含む .so ファイルを生成しています。
共有ライブラリを別のプロセスに対して実行していますが、コードはライブラリ内のコンストラクター関数 (Windows の DLLMain など) を介して実行されます。
自分のコードが実行されていることはわかっており、特定の時点まで問題なく動作します。基本的に私の問題は、ASIO とネットワーク コードを別のスレッドに配置しようとすることです。私はそれを行うために次のコードを使用しています:
asio::io_service io_service;
server server(io_service, port);
asio::thread t(boost::bind(&asio::io_service::run, &io_service));
現在、このコードはライブラリ内のコンストラクター関数内で実行されるため、セグ フォールトがスローされ、その理由がわかりません。私がそれを置き換えると:
asio::io_service io_service;
server server(io_service, port);
io_service.run();
コードは 100% 正常に実行されますが、実行スレッド全体が盗まれ、フックされたプロセスはまったく実行されません。誰か助けてくれませんか?私は本当に混乱しています。
乾杯