2012-01-02 47 views
3

解決方案:我只是將-lpthread -ldl標誌添加到我的生成文件,它的工作原理!不知道爲什麼,但我很幸運,以避免手動編譯sqlite3,因爲我正在嘗試..嗯,無論如何,一些答案在哪裏很不錯。謝謝你們,我們會爲你喝點茶。如何在我的C++應用程序中編譯sqlite3?

三個月前,我能夠找到如何做到這一點,但現在它不工作。我有一個巨大的C++應用程序,我需要嵌入sqlite3代碼,但我無法編譯它。我使用這樣的東西:

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

但它不工作;我嘗試了很多變化。我有一個makefile,在那裏我添加了sqlite3.h和sqlite3.c文件。當我在我的應用程序的特定文件夾做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' 

這意味着,我需要添加-lpthread標誌,試圖從應用程序分別編譯sqlite3的時候。那麼,我卡住了。

+1

也許你應該發佈你的Makefile ... – 2012-01-02 15:05:06

+0

SQLite郵件列表幾乎肯定會是一個更合適的地方。這不是關於編程語言的問題,而是關於構建問題的個人協助請求。 – 2012-01-02 15:17:42

+0

好的,很抱歉,會轉到他們的郵件列表。不過,我不想爲了解決這個問題而簽署這份清單。因此我會殺死自己。 – 2012-01-02 15:23:49

回答

2

您需要-c標誌來產生一個目標文件而不是鏈接。並跳過這些庫 - 在鏈接整個應用程序時通過它們。

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

謝謝,它編譯和現在我有我的應用程序子文件夾中的這些文件:sqlite3.c,sqlite3.h,sqlite3.lo,sqlite3.o 但我仍然有問題與我的問題中描述的pthread。 – 2012-01-02 15:13:27

3

鏈接時命令行上庫的順序很重要。將庫(-lpthread -ldl)放到最後。

+0

嗯,也許有時它很重要,但在我的情況下它沒有。 – 2012-01-02 15:34:45