Я новичок в Linux, и я пытаюсь переместить мою библиотеку из окон в Linux. Это родной двоичный файл (mylib.so), но он будет загружен моно ([DllImport()]). Я использую pcre (Perl Compatible Regular Expressions) в этой библиотеке. Когда мой исполняемый файл .NET пытается загрузить mylib.so, он выдает исключение (lib не найден). Когда я установил MONO_LOG_LEVEL=debug
. Я говорю, что моя библиотека найдена, но библиотеки pcre нет.Загрузить общую библиотеку, которая использует другую общую библиотеку
Я попытался загрузить его динамически (dlopen(), dlsym()
). Когда я создаю исполняемую версию моей библиотеки, связывающую ее с dl (-ldl), она отлично работает. Но когда я загружаю его из моно, я получил SIGSEGV.
создать эту библиотеку как (для версии с дл):
g++ -fPIC -c *.cpp
g++ -shared -Wl,-soname,libmylib.so.1.1 -ldl -o libmylib.so.1.1 *.o
Я создать простую тестовую программу, ссылку на mylib.so and dl
(-l: libmylib.so.1.1 -ldl), и она работает.
Мне кажется, мне нужно заставить mylib связываться с dl (или напрямую с pcre), но я не знаю, как это сделать. (Надеюсь, это возможно)
Все, что я хочу, это создать библиотеку, которая использует pcre и работать под моно.
The pcre lib находится в пределах поиска для погрузчика, да? ldconfig -v показывает это? – Joe