Строительство sqlite для окон в надлежащем порядке - PullRequest
6 голосов
/ 18 апреля 2011

Моя проблема не в том, как я собираю sqlite - мой бинарный файл намного медленнее предварительно скомпилированный на странице загрузки sqlite (примерно 3-6 раз в зависимости от запрос).

Я использую sqlite3.h и sqlite3.c из источника объединения:

http://www.sqlite.org/sqlite-amalgamation-3070602.zip

Я добавил следующие флаги при компиляции sqlite:

gcc
-s -O4 -I. -fomit-frame-pointer
-DNDEBUG
-DSQLITE_OS_WIN=1
-DSQLITE_HAVE_READLINE=0
-DSQLITE_THREADSAFE=1
-DSQLITE_TEMP_STORE=2
-DSQLITE_ENABLE_RTREE
-DSQLITE_ENABLE_FTS3
-DSQLITE_OMIT_COMPILEOPTION_DIAGS
-DSQLITE_ENABLE_COLUMN_METADATA
-DNO_TCL

Я создал его как с MINGW, так и с MSVS 2010.

Кто-нибудь знает, как собрать sqlite, чтобы получить тот же двоичный файл, что и на страница загрузки?

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 29 июня 2011

Следуйте инструкциям на Вики SQLite: как скомпилировать и проверить, какие аргументы Make передает компилятору.Моим первым подозреваемым будет -O4, поскольку GCC понимает наивысший уровень, равный -O3, и даже это обычно оказывается хуже, чем -O2 или -Os (поскольку малый размер == отсутствие кэш-памяти ЦП и -O3очень сильно раздувает бинарный файл).

Хотя я вижу, что подход отличается: Сборка под Windows без Tcl использует -O2, но билет # 931 использует проклятый-O4 «Режим Gentoo Ricer».В любом случае, эти переключатели оптимизации не стоят большого количества без указания целевой архитектуры: попробуйте -march=core2 или -march=native для автоматического обнаружения, но помните, что такой код не будет работать на более ранних процессорах.-march=nocona будет работать на чем-то более новом, чем Pentium 4, и все же даст компилятору много возможностей для полезных оптимизаций.

...