On Fri, Apr 8, 2016 at 5:49 PM, Nathaniel Smith <n...@vorpus.org> wrote: > Can you give a tiny concrete example? My questions are basic enough that I > feel like I'm missing something fundamental :-)
Yes, I think you might be missing something, but I'm not sure exactly where. In the issue I provided a tiny example which you can see here: https://gist.github.com/embray/12a67edb82b213217e31f408007898e6 The C code generated by this example currently does not compile on Windows, because of how Cython uses DL_IMPORT incorrectly. Regardless of what it *does* do, Cython should not be using the DL_IMPORT macro at all actually since that no longer even exists in Python. > My first question is why you even need this, since AFAIK there are no cases > where it is correct to have a cython module dllexporting symbols that appear > in header files. This is what cimport is for, right? I don't think this has anything to do with cimport. Could you explain what you mean? > My second question is why you would want to do this via the command line, > when compiling the dll means that you are compiling some cython-generated > .c, which means that you can put the #define directly in the source code, > no? Not necessarily. As you can see in my example the file fooutil.c is hand-written C code that was not generated by Cython, but which uses a function in the Cython-generated code. It includes "foo.h". In principle you're right--the hand-written C code could set the proper #defines but it would have to do so *before* including "foo.h". It's not very obvious that this would be needed. Most other code I've seen that addresses this issue--including cpython itself--do so by passing an appropriate define to the compiler via the command-line, and that seems the clearest to me. Best, Erik > On Apr 8, 2016 5:35 AM, "Erik Bray" <erik.m.b...@gmail.com> wrote: >> >> Hi all, >> >> I'd like to call attention to an issue I've been looking into for the >> past couple days: >> >> https://github.com/cython/cython/pull/360 >> >> To summarize the discussion, when building DLLs for Windows, functions >> that should be exported by that DLL must be marked >> __declspec(dllexport) in their declaration. However, when using the >> same header file in a project that links to that DLL the same function >> must be declared __declspec(dllimport). >> >> It's common practice to have a macro for this, whose value is >> controlled by whether or not a macro (often called something like >> "DLL_EXPORT"). When compiling the DLL we would define -DDLL_EXPORT to >> output __declspec(dllexport). Otherwise it outputs >> __declspec(dllimport). >> >> Cython currently handles this with such a macro called DL_IMPORT which >> comes from Python. However, this macro was deprecated some time ago, >> and is removed in current Python 3 versions. So Cython must replace >> it with its own. >> >> I'm working on a patch for this--to reduce confusion the macro is >> named specifically for the Cython module it's associated with. For >> example, for a Cython module named "foo.bar" there are two macros >> DLL_EXPORT__foo__bar and EXPORT__foo__bar. If the latter is defined >> then the former outputs dllexport, otherwise it outputs dllimport. >> I've attached the patch in progress. >> >> I'm open to comment on this, but where I'm stuck now is that in order >> for the "foo.bar" module to be compiled correctly it needs >> EXPORT__foo__bar to be defined at compile time. And it's not clear to >> me what the best way is for the Cython compiler to pass down options >> that are passed to the C/C++ compiler. In general the best way would >> be to attach this to the define_macros attribute of the associated >> distutils/setuptools Extension object and let the distutils compiler >> class generate the right compiler options. But it's not clear to me >> from Cython's internals where the best place to do that would be. >> >> Thanks, >> Erik >> >> _______________________________________________ >> cython-devel mailing list >> cython-devel@python.org >> https://mail.python.org/mailman/listinfo/cython-devel >> > > _______________________________________________ > cython-devel mailing list > cython-devel@python.org > https://mail.python.org/mailman/listinfo/cython-devel > _______________________________________________ cython-devel mailing list cython-devel@python.org https://mail.python.org/mailman/listinfo/cython-devel