{"id":3112,"date":"2019-09-03T19:06:24","date_gmt":"2019-09-03T11:06:24","guid":{"rendered":"https:\/\/yanjingang.com\/blog\/?p=3112"},"modified":"2019-09-03T19:06:24","modified_gmt":"2019-09-03T11:06:24","slug":"python%e8%b0%83%e7%94%a8c%e7%bc%96%e5%86%99%e7%9a%84-so","status":"publish","type":"post","link":"https:\/\/yanjingang.com\/blog\/?p=3112","title":{"rendered":"python\u8c03\u7528c\u7f16\u5199\u7684.so"},"content":{"rendered":"<p>1.\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u7684c .so<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">\/* 1.1 vim sum.c *\/\r\n\r\n#include &lt;stdio.h&gt;\r\n#include &lt;stdlib.h&gt;\r\n\/*\r\n * gcc sum.c -fPIC -shared -o sum.so\r\n * \u6216\u8005\r\n * -g -Wall \u4f9b\u8c03\u8bd5\u4f7f\u7528\uff0c\u4e0d\u662f\u5fc5\u987b\u7684\r\n * gcc -Wall -g  -fPIC -c sum.c -o sum.o\r\n * gcc -shared sum.o -o sum.so\r\n * \r\n *\/\r\n\r\nvoid echo(char* msg){\r\n    printf(\"%s\\n\",msg);\r\n}\r\n\r\nint max(int a,int b)\r\n{\r\n    return a&gt;b?a:b;\r\n}\r\n\r\nint sum(float a,float b){\r\n    return a+b;\r\n}\r\n\r\nint sum_array(int array[], int num){\r\n    int i =0, sum = 0; \r\n    for(i=0; i&lt;num; ++i) \r\n        sum += array[i];\r\n    return sum;\r\n}\r\n\r\nvoid modify_array(int array[], int num){\r\n    int i =0, sum = 0; \r\n    for(i=0; i&lt;num; ++i) \r\n        array[i] *= 10;\r\n}\r\n\r\n\/* 1.2 \u7f16\u8bd1.so\u6587\u4ef6 *\/\r\ngcc sum.c -fPIC -shared -o sum.so<\/code><\/pre>\n<p>2.\u7f16\u5199python\u6d4b\u8bd5\u811a\u672c<\/p>\n<pre class=\"pure-highlightjs\"><code class=\"\">\/* 2.1 vim test.py *\/\r\n\r\n#!\/usr\/bin\/python\r\n# -*- coding: utf8 -*-\r\nimport ctypes\r\nimport numpy as np\r\n\r\nso = ctypes.CDLL('.\/sum.so')\r\n\r\n# echo\r\nso.echo(\"hello\")\r\n\r\n# max\r\nret = so.max(1, 2) \r\nprint(ret)\r\n\r\n# sum  (int\/string\u4ee5\u5916\u7684\u7c7b\u578b\u9700\u8981\u8f6c\u6362\u624d\u80fd\u8bc6\u522b)\r\nret = so.sum(ctypes.c_float(1), ctypes.c_float(2))\r\nprint(ret)\r\n\r\n# sum_array\r\npyarray = [1, 2, 3, 4, 5]\r\ncarray = (ctypes.c_int * len(pyarray))(*pyarray) #\u6709\u70b9\u7c7b\u4f3cmalloc\u7684\u65b9\u5f0f\u751f\u6210carray\r\nret = so.sum_array(carray, len(pyarray))\r\nprint(ret)\r\n# modify_array\r\npyarray = [1,2,3,4,5,6,7,8]\r\ncarray = (ctypes.c_int * len(pyarray))(*pyarray)\r\nso.modify_array(carray, len(pyarray))\r\nprint(list(carray))\r\n\r\n\/* 2.2 \u6d4b\u8bd5 *\/\r\npython test.py\r\n\u8f93\u51fa\u7ed3\u679c\uff1a\r\n  hello\r\n  2\r\n  3\r\n  15\r\n  [10, 20, 30, 40, 50, 60, 70, 80]<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>yan 19.9.3<\/p>\n<p>&nbsp;<\/p>\n<p>\u53c2\u8003\uff1a<\/p>\n<p>https:\/\/www.cnblogs.com\/yahengwang\/p\/9687610.html<\/p>\n<p>https:\/\/www.cnblogs.com\/fariver\/p\/6573112.html<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1.\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u7684c .so \/* 1.1 vim sum.c *\/ #include &lt;stdio.h [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[875,255],"tags":[877,434,876],"_links":{"self":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3112"}],"collection":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3112"}],"version-history":[{"count":0,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/3112\/revisions"}],"wp:attachment":[{"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yanjingang.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}