在linux開發的動態連接庫須要被python調用,首先須要生成.so文件。 生成動態連接庫的方法網上有不少,這裏就不用多說,主要就是首先根據源文件編譯生成.o,而後連接這些.o文件-shared生成.so。須要注意的是,在編譯連接生成動態庫的時候必定要加-fPIC參數。並且若是在連接時須要連接其餘庫的話,必須保證其餘庫編譯時也是加了-fPIC參數。這裏筆者就是調用了mysql數據庫libmysqlclient.a靜態庫,可是這個庫沒有加-fPIC編譯,因此生成動態庫的時候一直報錯,說是須要加-fPIC從新編譯。最後從網上下載了libmysqlclient的源碼,而後加上-fPIC參數從新編譯生成.a,問題才解決。 須要注意的是,libmysqlclient是使用cmake,該編譯參數須要在CMakeList.txt文件裏面修改編譯參數加入-fPIC便可。 生成.so文件必定要將引用的其餘庫引用一塊兒連接,若是不一塊兒連接的話,在python調用的時候會報未定義錯誤。 生成動態連接庫之後就能夠在python裏面調用了。 調用動態庫能夠使用ctypes和boost。 本次筆者使用ctypes調用.so動態庫函數。 調用的方法: 1.在python中引入ctypes: import ctypes 2.加載動態庫 lib_handle = ctypes.CDLL('./xxx.so') 3.關聯動態庫中的函數 func = lib_handle.func 4.使用函數 func(par1,par2) 須要注意的是,在動態庫中定義的全局變量不能在python中這樣直接引用,目前引用的方法筆者尚未研究出來。