Возможный конфликт общей библиотеки, приводящий к повреждению базы данных SQLite - PullRequest
0 голосов
/ 13 января 2011

Наше приложение представляет собой плагин для браузера FF & Chrome. Приложение использует SQLite для хранения данных. Файлы SQLite повреждаются в FF / Linux или FF / Mac.

Наша гипотеза для поврежденных файлов описана ниже:

1) FF загружает SQLite 3.7.1 как общую библиотеку

2) Наш плагин (который является общей библиотекой) статически связан с SQLite 3.7.4. Мы убедились, что наш плагин экспортирует только один символ NSGetModule (требуется FF для загрузки плагина). Все остальные символы скрываются с помощью опции компилятора --version-script

3) Что-то плохо происходит из-за возможных конфликтов символов в нескольких версиях библиотеки SQLite

Дополнительные комментарии:

1) Та же проблема не возникает в Chrome, так как Chrome запускает плагин в отдельные процессы
2) Мы не сталкиваемся с этой проблемой в Windows. Только на Linux или Mac
3) Мы должны использовать SQLite 3.7.4, так как мы используем функции последней версии

Есть идеи?

1 Ответ

0 голосов
/ 16 января 2011

Ваше предположение о причине - неожиданном конфликте символов - вполне вероятно, верно.

Если вы все правильно спрятали (как говорите), выведите

nm -D your-plugin.so
В

в Linux должен быть указан только NSGetModule, как определено, и вообще нет символов SQLite (я ожидаю, что вы все равно увидите довольно много неразрешенных символов из libc, и с чем бы вы ни связали свой плагин ).

Вы можете запустить Firefox в Linux с LD_DEBUG=symbols,bindings. Это даст много МБайт вывода, но вы должны увидеть очень мало ссылок на ваш плагин, ни для каких символов SQLite.

Это то, что вы на самом деле наблюдаете?

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