Compile Max 6.1 external with MinGW x64

ppff's icon

Hello,

I have to create a Max external, and since I'm used to develop on linux and use tools such as gcc and ld, I've downloaded MinGW for Windows, both in x86 and x64.

When I compile for max 6.0 (in x86), everything works, I can use my external. But if I compile in x64 (from the Max SDK 6.1.4, with the x64 library) and then try to import the object in Max, the program freezes and I have no choice but to quit. I get the Windows exception code c0000005, which is basically a segmentation fault. I've tried with the examples given in the SDK to make sure I have no code error but it also didn't work.

Does anybody know why this happens? It's really annoying to waste time on this kind of problem.

Thank you very much!
Pierre.

alfonso santimone's icon

hi guys! any hint/help on this topic?
i'm trying to help a friend wich is trying to compile csound~ for Max 64 bit

best

Rory Walsh's icon

Did you get anywhere with this? The same thing happens for me on Windows 8.1. I can compile the examples as x86 without any problems, but the x64 version causes a crash in Max. My compile command looks like:

gcc simplemax.c -shared -DWIN_VERSION -DWIN_EXT_VERSION -IC:\Users\rory\Documents\sourcecode\MaxSDK-6.1.4\c74support\max-includes -C:\Users\rory\Documents\sourcecode\MaxSDK-6.1.4\c74support\max-includes\x64 -lMaxAPI -o simplemax.mxe64

No errors are reported in the building and linking stages, but Max still crashes when trying to load it.

ppff's icon

Yeah, I know, it's exactly what's happening... It's really annoying.

I guess we could try with Visual Studio Compiler, but I don't have enough time and I've moved to something else now!

Keep me updated, just in case you find something ;)

alfonso santimone's icon

I think would be kind to get a word by C74 team.
It's not a 3rd party external problem, given that the problem is present even on the SDK example provided by C74 istelf

alfonso santimone's icon

wouldn't be fine to move this post to the DEV section to get more attention on this very interesting topic ( a lot of externals compiled with open sources compilers would certainly be a plus for the whole Max community )

alfonso santimone's icon

hi asked C74 for support via email. they replied that they don't give support for their own SDK. well, weird enough.
so, sadly, we're completely on our own on this issue and i guess as it is now Visual Studio is the only one option.
i wonder who can we ask for help. (minGW team? eric lyon ( author of a great book on max and pd externals design)?)

let's keep in touch on this if we can.

best.

Jeremy's icon

I doubt that that is an exact quote. However, the SDK provides documentation on building with Visual Studio and 32-bit Cygwin. You want to build with an undocumented toolchain.

Visual Studio is free and documented. 64-bit MinGW is currently unsupported (implicitly in that we don't mention it in the SDK). Unsupported means you're on your own until we're able to support and document that toolchain. Sorry, but we have limited resources to apply to testing and retooling our SDK, and we provide full documentation for setting up the free and usable toolchains which we do support.

Jeremy

alfonso santimone's icon

Hi Jeremy, i don't want to be polemic at all.
Just trying to find a way to solve this issue ( which surely and definetly is an issue).

The exact words by Andrew wich is as always very kind were
"Hi Alfonso,

Sorry, we can't help with SDK questions in support. You'll need to keep banging away in the Dev section of the forum

Cheers"

Anyway i still think is kind of strange not having help from C74 with the company's main product's SDK.
I understand everything and all the great work C74 does on Max.
BTW i think would a great benefit for the whole community to try to solve this issue ( i.e. there are more custom externals for OSx than for Win. Helping with this minGW could improve the situation )

just my 2 cents.

thanks

a.

ppff's icon

Alright, finally an answer, thanks!

If c74 can't help us right now, I think we need people who know the low-level differencies between msvc and mingw (I mean the initial error is a seg fault and I really can't imagine where it can come from). In the meantime, it would be interesting to try different versions of mingw (all in x64 of course).

If somebody wants to try this... well that's great! I'm not into that anymore but I'd sure like to know.

Cheers

Rory Walsh's icon

I had a few spare minute just now so I tried running this through gdb. The call to class_new() is causing the segfault, but I can't tell much more than that. Here is the backtrace:

(gdb) bt
#0 0x0000000064a81590 in class_new ()
from C:\Users\rory\Documents\sourcecode\MaxSDK-6.1.4\examples\basics\simplema
x\simplemax.mxe64
#1 0x0000000064a81496 in main () at simplemax.c:38
#2 0x0000000140393dbc in force_install ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

I don't suppose there is a debug version of the MaxAPI.lib available somewhere?

alfonso santimone's icon

Very useful finding Rory! let's hope this info will help helping us! :-)

Rory Walsh's icon

I'm afraid it's not much use at all without a debug version of the library.

alfonso santimone's icon

indeed. our hopes are on C74 team. given they don't give support on the SDK at least we can hope they can investigate the issue for the next SDK version. i mean i guess they have an internal debug version of the library.

djlbe's icon

Hi,
About two years have past... does someone have news about this problems ? it has been solved ?