最近需要將從github上面下載下來的c/c++開源代碼編譯成動態庫文件,然后利用的python的ctypes模塊進行調用。
整個源碼結構如下圖:
如圖目標是要將nmprkC.cpp里面的函數接口封裝成動態庫,文件相互依賴關系復雜,還好源碼中提供了Makefile文件,但需要簡單修改一下
找到Mikefile中生成 .o文件的位置
修改前:
修改后:
可以看到修改前后的區別是加入了 -fPIC參數(-fPIC 實現動態鏈接庫與位置無關)
執行make后生成如下 .o目標文件:
然后利用目標文件.o生成動態庫.so文件:
至此就可以得到可以使用的動態鏈接庫文件 libnmprkc.so文件了
再說一哈:
剛開始直接使用的 :g++ -shared -o libnmprkc.so *.o命令,沒有加 -lssl -lcrypto -pthread選項,結果使用 ldd -r libnmprkc.so 查看 libnmprkc.so 文件時發現好多地方沒有編譯進來undefined symbol 如下圖:
是因為需要的庫沒有加進來,加上就好!