Вы можете легко найти, где mono ищет эту родную библиотеку, установив MONO_LOG_LEVEL для отладки и фильтрации MONO_LOG_MASK только для сообщений, связанных с DLL.
export MONO_LOG_LEVEL=debug
export MONO_LOG_MASK=dll
mono yourprogram.exe
или как один лайнер, так что вы не должны быть сброшен окр вары:
MONO_LOG_LEVEL=debug MONO_LOG_MASK=dll mono yourprogram.exe
Mono и редактор OS-X динамической ссылки («человек dyld» для подробностей) не требуют DYLD_LIBRARY_PATH для установки в текущий каталог ('.'). Примечание. Linux требует, чтобы LD_LIBRARY_PATH включал текущий каталог, если это ваше намерение.
- Переместите эти файлы карт dll с пути, чтобы удалить их из уравнения.
- Unset DYLD_LIBRARY_PATH
- кд в каталоге, который содержит ех вашего CIL на основе, динамические библиотеки и родной dylib (ы)
- MONO_LOG_LEVEL = отлаживать MONO_LOG_MASK = дллы моно yourprogram.exe
Использования DLL нативный/вы можете отслеживать, какая библиотека не найдена (или одна из ее зависимостей), или если это неправильная ARCH для вашей моно версии.
Если у вас по-прежнему возникают проблемы, нам нужно знать, в какой библиотеке SQLite вы используете параметры, которые вы используете для его компиляции (или версии с аркой, если вы получаете его через Nuget). Публикация вывода вашей DLL-трассировки также быстро решила бы проблему.
Примечания:
Я предполагаю, что вы используете библиотеку System.Data.SQLite и компиляции опции «/ р: UseInteropDll = истина/р: UseSqliteStandard = ложь».
Mono включает в себя SQLite в нем по умолчанию установки, это 32-разрядный на OS-X:
file /Library/Frameworks/Mono.framework/Versions/4.0.2/lib/libsqlite3.dylib
/Library/Frameworks/Mono.framework/Versions/4.0.2/lib/libsqlite3.dylib: Mach-O dynamically linked shared library i386
Предполагая, что вы используете установщик OS-X пакета из Mono, таким образом, получают 32-разрядную версии Mono и, следовательно, нуждаются в 32-разрядных версиях родных библиотек.
>>file `which mono`
/usr/bin/mono: Mach-O executable i386
/usr/lib/libsqlite3.0.dylib является многопрофильным ARCH жира бинарным, так что библиотека не является проблема, но ваш вывод отладки может показать другое, что является проблемой,
>>file /usr/lib/libsqlite3.0.dylib
libsqlite3.0.dylib: Mach-O universal binary with 3 architectures
libsqlite3.0.dylib (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
libsqlite3.0.dylib (for architecture i386): Mach-O dynamically linked shared library i386
libsqlite3.0.dylib (for architecture x86_64h): Mach-O 64-bit dynamically linked shared library x86_64
Две вещи: 'OS X' не использует переменную' $ PATH', которую выполняет 'Windows', а динамические библиотеки -' dylibs', а не 'dlls'. Для того, чтобы 'dll' корректно работал с mono и' OS X', его нужно сопоставить с помощью 'Dllmap'. –
@ l'L'l: [Это программное обеспечение] (https://github.com/aegif/CmisSync) использует SQLite на Mac с Mono и не содержит никаких «Dllmap» ...все еще пытаясь найти, как это управляет. –
Похоже, у него есть * несколько * [dllmaps] (https://github.com/aegif/CmisSync/search?utf8=%E2%9C%93&q=dllmap), поэтому я бы предположил [interop.dll] (https : //github.com/aegif/CmisSync/search? utf8 =% E2% 9C% 93 & q = Interop.dll) также может понадобиться. –