2012-01-02 17 views
3

解決策:私はメイクファイルに-lpthread -ldlフラグを追加しました。理由は分かりませんが、私が試していたときにsqlite3を手作業でコンパイルするのを避けるのに十分なことは幸運です。うーん、とにかく答えはかなり良いところです。おかげで、あなたに行くと、お茶を飲むだろう。C++アプリケーションでsqlite3をコンパイルするには?

3ヶ月前に私はそれを行う方法を見つけることができましたが、現在は機能していません。私はsqlite3コードを埋め込む必要がある巨大なC++アプリケーションを持っていますが、コンパイルできません。私はこのようなものを使用します:

gcc sqlite3.c -lpthread -ldl -o ./sqlite3.o 

しかし、それは動作しません。私は多くのバリエーションを試しました。私はsqlite3.hとsqlite3.cファイルを追加したmakefileを持っています。私は私のアプリの特定のフォルダにmake && make installを行うと、それがエラーを示しています

.libs/sqlite3.o: In function `pthreadMutexTry': 
/home/.../client/sqlite3.c:17769: undefined reference to `pthread_mutex_trylock' 
.libs/sqlite3.o: In function `pthreadMutexAlloc': 
/home/.../client/sqlite3.c:17637: undefined reference to `pthread_mutexattr_init' 
/home/.../client/sqlite3.c:17638: undefined reference to `pthread_mutexattr_settype' 
/home/.../client/sqlite3.c:17640: undefined reference to `pthread_mutexattr_destroy' 

これはアプリとは別にsqlite3のをコンパイルしようとしたとき、私は、-lpthreadフラグを追加する必要があることを意味します。まあ、私は立ち往生しています。

+1

メイクファイルを投稿するべきかもしれません... –

+0

SQLiteのメーリングリストは、これを実現するためにもっと適切な場所になるでしょう。これはプログラミング言語に関する質問ではなく、ビルドの問題に関する個人的な支援の要請です。 –

+0

申し訳ありませんが、彼らのメーリングリストに行きます。しかし、私はこの問題を解決するためにリストに署名したくありません。私は自分自身を殺すだろう。 –

答えて

2

-cフラグは、オブジェクトファイルを生成し、リンクしないために必要です。ライブラリをスキップします。アプリケーション全体をリンクするときに渡します。

gcc -c -o sqlite3.o sqlite3.c 
+0

ありがとう、それはコンパイルされ、今私のアプリケーションのサブフォルダにこれらのファイルがあります:sqlite3.c、sqlite3.h、sqlite3.lo、sqlite3.o しかし、私はまだ私の質問に記載されたpthreadに問題があります。 –

3

コマンドラインでライブラリの順序事項を結びます。最後に図書館(-lpthread -ldl)を置く。

+0

まあ、時にはそれは重要ですが、私の場合はそうではありませんでした。 –

関連する問題