これは多少のメタ質問かもしれませんが、私の問題は共有ライブラリと静的ライブラリの知識が不足しているからです。セグメンテーションフォールトプログラムは共有ライブラリにコンパイルされますが、スタティックではありません
私は、infinibandを学習/次回のワークプログラムの準備として使用しているサーバー/クライアントシステムに取り組んでいます。もともと私は2つの実行可能ファイルを持っていました。各ファイルには同じソースコードが含まれていましたので、これらのファイルを共通ファイル(ヘッダーと共にRDMAConnectionManager.cppとRDMAConnection.cpp)に分割しました。
私は、これらのファイルをライブラリにしたいと決めたので、サーバーとクライアントが同じ低レベルコードを使用していることを確認できます。私はいつも共有ライブラリを使用していましたので、cmake経由で共有ライブラリを作成して、標準に従って処理しました。
問題は、すぐに私はこれをしたとして、私は、具体的ib_verbs機能と、ライブラリrdmacmが提供する機能でセグメンテーションフォールトを得るでしょう、でした。私はそれが順序を結ぶことと関係があると思ったが、助けを変えたものは何もなかった。
気楽に、私はそれをSHAREDライブラリからSTATICライブラリに変更しました。これは完全に機能しました!私が静的なことを理解しているのは、リンクしているライブラリのすべてのシンボルが含まれていて、共有されていないということです。しかし、今私はこの厄介な問題を見つけたので、私は何かが欠けているように感じる。
私はそれ以来、いくつかの読書を行いましたし、違いについてもっと気楽に感じましたが、私はまだこの問題のどのような原因(または将来の見方)がわかりません。誰かがなぜこのような何かが起こるかもしれないという考えを持っていますか?
完全に機能しませんでした。あなたはセグメンテーションを偽装したものを動かしましたが、まだそこにあります。共有ライブラリは50年ほど前から存在しています。 RDMAは10周间。あなたのコードは2日間ぐらいです。オッカムの剃刀は何を教えてくれるのですか? – stark
おそらく 'ldd'を使って、実際に使用していると思われる動的ライブラリを使用しているかどうかを確認できます。 –