9

プログラムに soci を実装しようとしていますが、方法がわかりません。NetBeans を使用するプロジェクトで、Linux で C++ を使用しています。http://soci.sourceforge.net/doc/structure.htmlの手順に従ってインストールし、ファイル soci.h を /src/core から、soci-mysql.h を /src からコピーしようとしました。私のプロジェクトでは /backends/mysql ですが、コンパイル エラーが発生します (これらのファイルには他の soci ファイルが含まれていますが、すべてのファイルをディレクトリにコピーするのは非論理的です...)。ガイドを何度も読みましたが、何が間違っているのかわかりません。例には、これらのファイルのみが含まれています。

ありがとう。

編集:回答の下のコメントに詳細を記載しました。soci を実装するためにどのような手順を踏む必要があるのか​​ わかりません。

4

2 に答える 2

8

そのページの関連ビットは

configure スクリプトがパラメーターなしで実行されると、プロセスの残りの部分は、/usr/local/include/sociSOCI ヘッダー ファイル/usr/local/libのデフォルトの宛先として、およびライブラリ ファイルのデフォルトの宛先として使用されます。

/usr/local/include はデフォルトのインクルード パスにあるはずです (たとえばgcc -c -v -x c++ /dev/null -o /dev/null、インストールで使用するリストを確認するなどの方法を試してください)。

#include <soci/soci.h>
#include <soci/soci-mysql.h>

次に、ライブラリをリンク ステップに追加する必要があります。ライブラリの静的バージョンと共有バージョンの両方があるようです。-lsoci_core -lsoci_mysqlリンク ステップに追加する必要があります。ただし、それが機能しない場合は、/usr/local/lib を検索ディレクトリとして指定する必要もあります-L/usr/local/lib -lsoci_core -lsoci_mysql。(これもおそらく既に存在しますが、を使用して確認できますgcc -print-search-dirs。)ただし、問題は、共有バージョンを使用していて、/usr/local/lib がディストリビューション ライブラリの検索パスにない場合です (/etc/ld を参照)。 .so.conf および/または /etc/ld.so.conf.d/*) の場合、実行時に共有ライブラリを見つけることができません。リンカー スイッチを使用してライブラリへのパスをハードコーディングするか-rpath、/usr/local/lib を以前のようにシステム全体の検索パスに追加するか、環境 (変数LD_LIBRARY_PATH)。これを行う最善の方法が何であるかはわかりません--rpath一般的にシステムを変更することは避けることをお勧めしますが、/usr/local/lib に多くのライブラリを構築している場合は、それを追加するのが理にかなっているかもしれません.

于 2011-01-02T21:48:08.117 に答える
2

実行時にC++プログラムでバックエンドエラーがロードされないのと同じようになりましたsession sql("mysql://db=...)

私は解決策を見つけました(少なくとも私のUbuntu 11.04では)。ただ行う:

sudo -i ln -s /usr/lib/libsoci_mysql-gcc-3_0-3.0.0.so /usr/lib/libsoci_mysql.so

SOCIライブラリ/usr/lib/libsoci_mysql.soはシステムにないファイルを検索しているようです。それが機能するシステムにあるライブラリへのリンクを作成する場合は購入してください/usr/lib/libsoci_mysql-gcc-3_0-3.0.0.so(debian / ubuntuはファイル名を元の名前から変更すると思いますが、 SOCIライブラリが元の名前を内部で検索するため、副作用があります)。

LD_DEBUG=filesbash環境変数を使用し、C++バイナリを実行してエラーを見つけました。

それが役に立てば幸い。

于 2011-11-29T18:38:36.783 に答える