opus-tools icon indicating copy to clipboard operation
opus-tools copied to clipboard

Windows MinGW Compiling

Open Benjamin-Loison opened this issue 5 years ago • 10 comments

Hello, I have been trying to use opus libs for months now but I can't achieve it.

If someone could tell me how exactly compile executable decoder/encoder for Windows using MinGW, I would be very grateful.

Because the only real answer I found (if don't want to use Visual Studio) is: Use executables...

Thank you

Benjamin-Loison avatar Apr 07 '20 14:04 Benjamin-Loison

Hmm. I used to build the release binaries this way. I thought I had a makefile to automate it, but I can't find it.

Do you mean cross-compiling for windows from a unix environment, or native windows mingw? IIRC the basis was something like

CC=i686-w64-mingw32-gcc-win32 make -f Makefile.unix

The tedious part is that you have to first do the same of all the dependencies: ogg, opus, opusfile, opusenc, and flac.

rillian avatar Apr 07 '20 16:04 rillian

Ok, here is what I was thinking of. It should be straightforward to adapt this to opus-tools. NB the dependency versions are out of date now.

rillian avatar Apr 07 '20 16:04 rillian

Thank you @rillian

Well native or cross-compile don't bother me (even if I prefer native). Yes I have quite understood that we need to compile all the dependencies... I am absolutely not keen on compiling not my projects...

I believe I am simply going to look at just using libraries but I have already given a few shots... Let say I want to compile this standalone Opus use file: https://pastebin.com/L5P2cyZS

I have libraries available here ? https://archive.mozilla.org/pub/opus/win32/opusfile-v0.9-win32.zip

If I do mingw32-g++ main.cpp -L "folderWhereIUnarchiveThePreviousFile" I always get:

undefined reference to `opus_get_version_string' and others... (I tried this several times in the past weeks...)

Ideas ? :/

EDIT: main.cpp is the code from the pastebin I know that g++ don't get the good libraries but I don't know how to solve it... Am I trying to link not the good libs ?

It seems that there isn't any available Window artifact here: https://github.com/xiph/opus-tools/issues/43

Benjamin-Loison avatar Apr 07 '20 17:04 Benjamin-Loison

The Windows artifacts are now working again and can be downloaded from Appveyor.

As for your link command, the libraries need to be listed at the end of the link command; add -lopusfile -logg -lopus to the end of the command to link with those libraries.

mark4o avatar May 17 '20 02:05 mark4o

@mark4o

Indeed I am now able to build as it does on Appveyor, thanks a lot !

Nevertheless I am mainly interested in compiling my main.cpp with MinGW by adding the arguments -lopusfile -logg -lopus. But generated .lib files with msbuild aren't supported by MinGW which requires .a libraries. Where/how can I find them/build them please ?

EDIT: Otherwise I get a bunch of errors like these:

c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: C:\Users\Benjamin\Desktop\opus\inception\opusfile-v0.9-win32/opus.lib(Win32/Release/opus/celt_decoder.obj):(.text$mn+0xa): undefined reference to __security_cookie' c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: ./opus.lib(Win32/Release/opus/NLSF_encode.obj):(.text$mn+0x50): undefined reference to _alloca_probe_16'

Or how can I build as done with Appveyor but just with MinGW and no msbuild ?

Benjamin-Loison avatar May 17 '20 17:05 Benjamin-Loison

@Benjamin-Loison i've answered in #173

vtorri avatar Oct 31 '21 06:10 vtorri