2013-07-04 3 views
2

Я новичок в 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 и работать под моно.

+1

The pcre lib находится в пределах поиска для погрузчика, да? ldconfig -v показывает это? – Joe

ответ

0

Вы неправильно связали свою библиотеку: если она использует libpcre, вы также должны связать ее с параметром -lpcre.

Смежные вопросы