2013-07-04 44 views
2

我是Linux新手,我試圖將我的庫從Windows移至Linux。它是本機二進制文件(mylib.so),但它將由mono([DllImport()])加載。我在這個庫中使用了pcre(Perl Compatible Regular Expressions)。當我的.NET可執行文件嘗試加載mylib.so時,它會拋出異常(找不到lib)。當我設置MONO_LOG_LEVEL=debug。我說我的圖書館已經找到,但是圖書館沒有。加載使用其他共享庫的共享庫

我試圖加載它動態(dlopen(), dlsym())。當我構建我的庫的可執行版本與dl(-ldl)鏈接時,它可以正常工作。但是當我從單聲道加載它時,我得到了SIGSEGV。

我創建這個圖書館等(版本DL):

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

pcre lib在裝載機的搜索區域內,是嗎? ldconfig -v顯示它? – Joe

回答

0

您錯誤地鏈接了您的庫:如果它使用libpcre,則必須將它與-lpcre選項鍊接。