Python:sip Compilation and Use

1. Compile sip source code Unzip the sip source and run PythonConfigure.py-p win32-g++ (win32-g++ means using the mingw...
1. Compile sip source code
  • Unzip the sip source and run PythonConfigure.py-p win32-g++ (win32-g++ means using the mingw32 compiler).
  • Modify generatedSipconfig.pyFile.When Python is installed in the C:\Program Files (x86) directory, place _Pkg_Program Files (x86) in config was replaced with Progra~2, as follows:
_pkg_config = { 'arch': '', 'default_bin_dir': 'C:\\Progra~2\\Python', 'default_mod_dir': 'C:\\Progra~2\\Python\\Lib\\site-packages', 'default_sip_dir': 'C:\\Progra~2\\Python\\sip', 'deployment_target': '', 'platform': 'win32-g++', 'py_conf_inc_dir': 'C:\\Progra~2\\Python\\include', 'py_inc_dir': 'C:\\Progra~2\\Python\\include', 'py_lib_dir': 'C:\\Progra~2\\Python\\libs', 'py_version': 0x030603, 'qt_framework': 0, 'sip_bin': 'C:\\Progra~2\\Python\\sip', 'sip_config_args': '-p win32-g++', 'sip_inc_dir': 'C:\\Progra~2\\Python\\include', 'sip_mod_dir': 'C:\\Progra~2\\Python\\Lib\\site-packages', 'sip_version': 0x041306, 'sip_version_str': '4.19.6', 'universal': '' }

When Python is installed in the C:\Program Files directory, place _Pkg_Replace Program Files with Progra~1 in config.

  • Compile, run make, and run make install to install sip after success.Where make install requires administrator privileges.
2. Testing
  • Write the C file test.c as follows:
#include <stdio.h> int add(int x, int y) { return x + y; } void hello(char* s) { printf("%s\n", s); } char* toString(int x, float y) { static char s[20]; sprintf(s, "x = %d; y = %f", x, y); return s; }
  • Write SIP fileTest.sip.The SIP file name must be the same as the.c file name.Since you are using the c language, you must add%Module(name=test, language="C").The contents are as follows:
/* Define the SIP wrapper to the add library. */ %Module(name=test, language="C") int add(int x, int y); void hello(char* s); char* toString(int x, float y);
  • To writeConfigure.py, as follows:
import os import sipconfig basename = "test" # The name of the SIP build file generated by SIP and used by the build # system. build_file = basename + ".sbf" # Get the SIP configuration information. config = sipconfig.Configuration() os.system("make clean") # Run SIP to generate the code. os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, basename + ".sip"])) os.system(" ".join(['gcc', '-c', basename + ".c"])) os.system(" ".join(['ar', '-r', "lib" + basename + ".a", basename + ".o"])) # Create the Makefile. makefile = sipconfig.SIPModuleMakefile(config, build_file) # Add the library we are wrapping. The name doesn't include any platform # specific prefixes or extensions (e.g. the "lib" prefix on UNIX, or the # ".dll" extension on Windows). makefile.extra_libs = [basename] # Search libraries in current directory makefile.extra_lflags = ['-L.'] # Generate the Makefile itself. makefile.generate() os.system("make")

Run PythonConfigure.pyThe resulting file is as follows:

Results.png

amongTest.pydThis is the compiled file.

  • test
import test a = test.add(12, 3) print(a) test.hello('How do you do'.encode()) s = test.toString(12, 45.6) print(s) //Output: 15 b'x = 12; y = -2.000000' //How do you do

25 May 2020, 12:21 | Views: 8930

Add new comment

For adding a comment, please log in
or create account

0 comments