共有オブジェクトを構築するときに、サードパーティの「ヘッダーのみ」のライブラリ ヘッダー (.h) ファイルを正しいパスに配置するのを忘れていました。それはうまく構築されました-振り返ってみると驚くべきことです。
実行すると、そのサードパーティのライブラリが共有オブジェクトで使用された行で正確にセグメンテーション違反が発生しました。
わからない部分は、それらのヘッダーファイルを で指定したパスにコピーした#include
ところ、セグメンテーションフォールトを起こすことができませんでした。オブジェクトを再構築することさえしませんでした。非常に奇妙なことは、ヘッダーファイルがあるディレクトリを移動しても、まだ機能していることです-セグメンテーション違反はありません。ただし、ディレクトリを完全にrmすると、クラッシュしました。現在のディレクトリとサブディレクトリのヘッダー ファイルを探しますか? 標準のヘッダーのみのライブラリも持っています(?)/usr/local/include
以前に共有オブジェクトを扱ったことがありません。私は通常、静的オブジェクトを作成し、それらをビルドに含めます。問題の共有オブジェクトを作成するために使用したフラグは次のとおりです。-shared -fPIC
この動作を理解したいと思います。展開があるから面白い。運用マシンにデプロイするときに、これらのヘッダー ファイルを含める必要がありますか? 基本的に、「ヘッダーのみ」のライブラリであるため、依存関係として持ちたくありません。
編集
コード:
#include <rapidjson/document.h>
#include <rapidjson/writer.h>
#include <rapidjson/stringbuffer.h>
void MyClass::myFunction()
{
rapidjson::StringBuffer string;
rapidjson::Writer<rapidjson::StringBuffer> jsonWriter(string);
}
デバッグ セッションへのリンクは次のとおりです: http://pastebin.com/a0FaQwf1