Linux環境下建立並使用動態鏈結庫

2021-08-02 10:18:36 字數 2297 閱讀 2657

在桌面建立dll.c檔案,將下面**複製進去。

#include "dll.h"

int sum(int* a, int n)

{ int i,s=0;

for (i=0;i

在桌面建立dll.h檔案,將下面**複製進去。

#ifndef dll_h  

#define dll_h

int sum(int* a, int n);

int plus(int a, int b);

#endif

在cmd中執行如下命令。

然後桌面上就會多出.o和.so檔案。

開啟canopy建立測試程式,檔名為:test.py,並將下面的**複製到test.py裡去。

# -*- coding: utf-8_ -*-

import wx

import ctypes

import sys

class myframe(wx.frame):

def __init__(self):

wx.frame.__init__(self, none, wx.id_any, 'dll example', size=(300, 200))

panel = wx.panel(self, wx.id_any)

in=wx.statictext(panel, wx.id_any, u" 輸入:")

self.intext = wx.textctrl(panel, wx.id_any, "1 2", size=(175, -1))

self.intext.setinsertionpoint(0)

out=wx.statictext(panel, wx.id_any, u" dll計算結果:")

self.outtext = wx.textctrl(panel, wx.id_any, " ", size=(175, -1))

compute=wx.button(panel, wx.id_any, u"計算", size=(50, -1))

self.bind(wx.evt_button, self.evtcompute, compute)

exit=wx.button(panel, wx.id_any, u"退出", size=(50, -1))

self.bind(wx.evt_button, self.evtexit, exit)

sizer = wx.flexgridsizer(cols=2, hgap=10, vgap=10)

sizer.addmany([in, self.intext,out, self.outtext,compute,exit])

panel.setsizer(sizer)

self.centre()

# known canopy bug: absolute filename required

self.cdll=ctypes.cdll("/home/wx/desktop/dll.so")

def evtcompute(self, event):

a=[int(x) for x in self.intext.getvalue().split()]

if len(a)==2:

result=self.cdll.plus(a[0],a[1])

else:

result=self.cdll.sum(ctypes.array(ctypes.c_int,len(a))(*a),len(a))

self.outtext.setvalue(str(result))

def evtexit(self, event): self.destroy()

if __name__ == '__main__':

# import os

# os.chdir(r"your working directory")

frame = myframe()

frame.show()

注意修改動態鏈結庫的路徑名!然後就可以執行了。

linux 下建立並動態載入 so 檔案

最簡單的生成,動態載入.so 檔案的例子 ifndef test h define test h include using namespace std void showmessage endif gcc shared fpic test.cpp o libtest.so.1.0 建立鏈結 ln ...

在windows下使用qt建立動態庫並使用

建立動態庫專案並編譯。如下 ifndef model h define model h include include if defined model library define modelshared export q decl export else define modelshared e...

Linux下建立動態庫

在linux下動態庫檔案字尾為.so,其中so代表 shared object,即共享目標檔案。動態庫的特點就是在系統記憶體中,只會存在動態庫的乙個副本。例如 程式a,b允許時都需要動態庫lib.so的支援。當a程式執行時,由於系統記憶體中沒有發現lib.so庫,所以需要載入lib.so。此時b程式...