2012-01-02 54 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