Как скомпилировать sqlite3 в моем приложении C ++? - PullRequest
3 голосов
/ 02 января 2012

РЕШЕНИЕ: Я только что добавил -lpthread -ldl flags в мой make-файл, и он работает! Понятия не имею почему, но мне посчастливилось избежать ручной компиляции sqlite3, как я пытался ... Хм, в любом случае, некоторые ответы были довольно хорошими. Спасибо, ребята, пойду и выпью чаю для вас.

Три месяца назад я смог найти, как это сделать, но теперь это не работает. У меня огромное приложение на C ++, где мне нужно встраивать код sqlite3, но я не могу его скомпилировать. Я использую что-то вроде этого:

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

Но это не работает; Я перепробовал много вариантов. У меня есть make-файл, куда я добавил файлы 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 отдельно от приложения. Ну, я застрял.

Ответы [ 2 ]

3 голосов
/ 02 января 2012

Порядок библиотек в командной строке при компоновке имеет значение. Поместите библиотеки (-lpthread -ldl) в последнюю очередь.

2 голосов
/ 02 января 2012

Вам нужен флаг -c, чтобы создать объектный файл, а не ссылку. И пропустить библиотеки - вы передаете их при связывании всего приложения.

gcc -c -o sqlite3.o sqlite3.c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...