xiph / opus-tools

A set of tools to encode, inspect, and decode audio in the Opus format.
https://opus-codec.org/
Other
225 stars 80 forks source link

Windows MinGW Compiling #51

Open Benjamin-Loison opened 4 years ago

Benjamin-Loison commented 4 years ago

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

rillian commented 4 years ago

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 commented 4 years ago

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.

Benjamin-Loison commented 4 years ago

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

mark4o commented 4 years ago

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.

Benjamin-Loison commented 4 years ago

@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 ?

vtorri commented 3 years ago

@Benjamin-Loison i've answered in #173