User Tools

Site Tools


python

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
python [2014/12/28 09:07] dongheepython [2018/07/18 14:10] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Python bindng ======+====== Python C/C++ bindng ======
 간단한 cad를 만들어 보는게 목표 간단한 cad를 만들어 보는게 목표
  - glfw, glew을 binding 하여 써보자.   - glfw, glew을 binding 하여 써보자. 
Line 43: Line 43:
  
 ---- ----
 +===== Cython Compiler =====
 +
 win32에서 cythonize할때 사용하는 컴파일러는 mingw32와 ms의 visual c++이 있는데, ms에서 python용으로 vc를 준다. win32에서 cythonize할때 사용하는 컴파일러는 mingw32와 ms의 visual c++이 있는데, ms에서 python용으로 vc를 준다.
  
 [[http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266|Microsoft Visual C++ Compiler for Python 2.7]] [[http://www.microsoft.com/en-us/download/confirmation.aspx?id=44266|Microsoft Visual C++ Compiler for Python 2.7]]
 +
 +----
 +===== Cython Tutorial =====
 +
 +# Cython Tutorial 2015-1-1
 +
 +install
 +
 +Dockerfile
 +<code>
 +FROM debian:sid
 +MAINTAINER Donghee Park <dongheepark@gmail.com>
 +
 +RUN apt-get update
 +CMD echo "updated"
 +RUN apt-get install vim python openssh-server -y
 +CMD echo "vim and ssh package installed"
 +RUN echo "Asia/Seoul" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
 +RUN echo 'root:docker' | chpasswd
 +RUN /etc/init.d/ssh start
 +RUN apt-get install build-essential python-pip python-dev -y
 +RUN pip install cython
 +
 +CMD ["/bin/bash"
 +
 +
 +</code>
 +
 +Makefile
 +
 +<code>
 +cython helloworld.pyx
 +gcc -g -O2 -fpic `python-config --cflags` -c helloworld.c -o helloworld.o  
 +gcc -shared -o helloworld.so helloworld.o `python-config --libs`
 +
 +</code>
 +
 +mycode.c
 +
 +<code>
 +#include <stdio.h>
 +
 +int myfunc(int a, int b)
 +{
 + printf("look we are within your c code!! \n");
 + return a+b;
 +}
 +</code>
 +
 +mycode.h
 +
 +<code>
 +#ifndef __MYCODE_H__
 +#define __MYCODE_H__
 +extern int myfunc (int, int);
 +#endif __MYCODE_H__
 +</code>
 +
 +mycodecpy.pyx
 +
 +<code>
 +cdef extern from "mycode.h"
 + cdef int myfunc (int, int)
 +
 +def callCfunc ():
 + print myfunc (1,2)
 +</code>
 +
 +<code>
 +cython mycodecpy.pyx
 +gcc -g -O2 -fpic -c mycode.c -o mycode.o
 +gcc -g -O2 -fpic -c mycodecpy.c -o mycodecpy `python-config --cflags`
 +gcc -shared -o mycodecpy.so mycode.o mycodecpy.o `python-config --libs` 
 +</code>
 +
 +----
 +===== xdress install =====
 +llvm 3.4.2 in macos x 10.9
 +
 +<code>
 +wget http://llvm.org/releases/3.4.2/clang+llvm-3.4.2-x86_64-apple-darwin10.9.xz
 +#wget http://llvm.org/releases/3.4.2/clang+llvm-3.4.2-x86_64-linux-gnu-ubuntu-14.04.xz
 +
 +tar xvfz clang+llvm-3.4.2-x86_64-apple-darwin10.9.xz
 +mv clang+llvm-3.4.2-x86_64-apple-darwin10.9 llvm-3.4.2-build
 +
 +export LLVM_CONFIG=llvm-3.4.2-build/bin/llvm-config
 +
 +git clone git://github.com/xdress/xdress.git
 +
 +cd xdress
 +
 +python setup.py build_ext --inplace
 +sudo python setup.py install
 +</code>
 +
 +
 +
 +<code>
 +xdress --debug -p clang
 +
 +</code>
 +----
 +===== xdress 사용하기 =====
 +
 +c++ class 'A' python으로 binding 하기
 +
 +
 +jehsrc/hoover.h
 +<code>
 +#if !defined(HOOVER)
 +#define HOOVER
 +namespace hoover {
 +class A {
 + public:
 +   float a;
 +   double power(int n=1);
 +};};
 +#endif
 +</code>
 +----
 +
 +jehsrc/hoover.cpp
 +
 +<code>
 +#include "hoover.h"
 +double hoover::A::power(int n){
 +  int i = 1;
 +  double val = a;
 +  while (i < n){val *= a; i++;};
 +    return val;
 +};
 +</code>
 +
 +
 +----
 +
 +jeh_xdressrc.py
 +
 +<code>
 +package = 'jedgar'      # top-level python package name
 +packagedir = 'jedgar'   # location of the python package
 +builddir = 'jehbuild'
 +
 +classes = [('A', 'jehsrc/hoover.*')]
 +</code>
 +
 +jeh_setup.py
 +<code>
 +import os
 +from distutils.core import setup
 +from distutils.extension import Extension
 +from Cython.Distutils import build_ext
 +
 +import numpy as np
 +
 +cwd = os.getcwd()
 +incdirs = [cwd, os.path.join(cwd, 'jehsrc'), np.get_include()]
 +
 +ext_modules = [
 +    Extension("jedgar.hoover", ['jehsrc/hoover.cpp', "jedgar/hoover.pyx", ],
 +    include_dirs=incdirs, language="c++")
 +    ]
 +
 +setup(  
 +  name = 'jedgar',
 +  cmdclass = {'build_ext': build_ext},
 +  ext_modules = ext_modules,
 +  packages = ['jedgar']
 +)
 +</code>
 +
 +Makefile
 +
 +<code>
 +all:
 +        xdress --rc jeh_xdressrc.py
 +        python jeh_setup.py build > /dev/null 2>&1
 +clean:
 +        rm -rf build
 +        rm -rf jehbuild
 +        
 +</code>
 +
 +----
 +Hoover Example
 +
 +<code>
 +from jedgar.hoover import A
 +
 +a = A()
 +a.a = 10
 +a.power(42)
 +</code>
python.1419757634.txt.gz · Last modified: 2018/07/18 14:09 (external edit)