On Tue, 2014-11-04 at 16:22 +0630, Veek M wrote: > https://github.com/Veek/Python/tree/master/junk/hello > doesn't work. > I have: > hello.c which contains: int hello(void); > hello.h > > To wrap that up, i have: > hello.py -> _hello (c extension) -> pyhello.c -> method py_hello() > > People using this will do: > python3.2>> import hello > python3.2>> hello.hello() > > It doesn't compile/work. > > deathstar> python setup.py build_ext --inplace > running build_ext > building '_hello' extension > creating build > creating build/temp.linux-x86_64-3.2 > gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes - > D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat - > Werror=format-security -fPIC -I/usr/include/python3.2mu -c pyhello.c -o > build/temp.linux-x86_64-3.2/pyhello.o > pyhello.c:15:6: warning: character constant too long for its type [enabled > by default] > pyhello.c:15:5: warning: initialization makes pointer from integer without a > cast [enabled by default] > pyhello.c:15:5: warning: (near initialization for 'hellomethods[0].ml_name') > [enabled by default] > pyhello.c:15:5: warning: initialization from incompatible pointer type > [enabled by default] > pyhello.c:15:5: warning: (near initialization for 'hellomethods[0].ml_meth') > [enabled by default] > pyhello.c:15:5: warning: initialization makes integer from pointer without a > cast [enabled by default] > pyhello.c:15:5: warning: (near initialization for > 'hellomethods[0].ml_flags') [enabled by default] > gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro > build/temp.linux-x86_64-3.2/pyhello.o -o > /root/github/junk/hello/_hello.cpython-32mu.so > > > >>> import hello > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > File "hello.py", line 1, in <module> > from _hello import * > ImportError: ./_hello.cpython-32mu.so: undefined symbol: hello
When I try your code, I get the error: ImportError: dynamic module does not define init function (PyInit__hello) There were a couple other problems as well. Like 'hello' in hellomethods instead of "hello" (note the double quotes). Also, NULL is no longer acceptable as a METH_XXXARGS replacement, you need to set it to METH_NOARGS (or MET_VARARGS if you plan on accepting arguments). I've found that you also need a NULL sentinel in the hellomethods array to avoid segfaults on my Linux box. After fixing these problems, you still need to add "hello.c" to the list of sources in setup.py to make sure that module is built. I've submitted a PR to your github repo showing you the changes necessary to get your module working on my computer. Hope this helps, Jason -- https://mail.python.org/mailman/listinfo/python-list