Giter VIP home page Giter VIP logo

Comments (11)

waldonnis avatar waldonnis commented on September 26, 2024 2

Chiming in since I narrowed it down to this commit in the bug report mentioned above...

I'll admit I'm also a little lost on mingw specifics, but mingw-w64 gcc supports a -municode option (gcc docs) that properly defines the UNICODE (and other) preprocessor macros and uses the correct startup code (that supports unicode) when linking. I tested this with a rudimentary patch that added -municode to the linker args only for avifdec/enc and it did allow them to link successfully. I have not run any tests against the resulting binaries at this time to check unicode input is functional, though. Compiling with MSVC likely doesn't need any of this, since it seems to be a mingw target specific issue.

Below is my rudimentary patch. The conditional should probably be modified to only apply to a mingw-w64 target since gcc docs mention it's the only target that supports -municode (and I have no idea what, if anything, can be done for mingw-w32 targets). I also just used PUBLIC for target_link_options for testing purposes, but can/should probably be changed as well. There may be a better way to fix this, but I don't know libavif nor mingw-w64 well enough to suggest alternatives.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9d28ae3..a47eec0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -793,6 +793,10 @@ if(AVIF_BUILD_APPS)
         set_target_properties(avifdec PROPERTIES LINKER_LANGUAGE "CXX")
     endif()
     target_link_libraries(avifdec avif_apps)
+    if(WIN32 AND MINGW)
+           target_link_options(avifenc PUBLIC "SHELL:-municode")
+           target_link_options(avifdec PUBLIC "SHELL:-municode")
+    endif()

     if(NOT SKIP_INSTALL_APPS AND NOT SKIP_INSTALL_ALL)
         install(

from libavif.

wantehchang avatar wantehchang commented on September 26, 2024 1

If we use the -municode solution, we should also add -DUNICODE and possibly also -D_UNICODE for all compilers on Windows, so that all compilers on Windows define the UNICODE macro when compiling libavif.

from libavif.

vtorri avatar vtorri commented on September 26, 2024 1

basically :

  1. if only wmain() is used (no other unicode version of functions) : -municode is sufficient
  2. if unicode version of functions are used (like CreateFile, which would be replaced with CreateFileW), -DUNICODE should be passed to the compiler

if I'm not mistaken, the commit only uses wmain() explicitely and convert argv to UTF8 with WideCharToMultiByte(), so -municode should be sufficient, and works for me btw. But passing -DUNICODE and -D_UNICODE will not hurt and will avoid possible future errors if unicode version of functions are wanted (unless you explicitely use the unicode version, like CreateFileW() instead of just CreateFile())

from libavif.

wantehchang avatar wantehchang commented on September 26, 2024

Vincent: Could you take a look at this? Thanks.

LigH: I am not familiar with MSYS2/MinGW. The current main branch of libavif uses wmain() instead of main() as the starting point of the avifdec.c, avifenc.c, and are_images_equal.cc programs on Windows so that we can receive the command-line arguments as wchar_t strings. It is common to do this in Windows applications, so there must be a way to build this kind of program in MSYS2/MinGW. Do you know what the trick is? Thanks.

from libavif.

LigH-de avatar LigH-de commented on September 26, 2024

Unfortunately, I am not at all a C/C++ developer. Just a halfwit running the script and interpreting error messages. But the MABS team has a good amount of experience, too...

from libavif.

kmilos avatar kmilos commented on September 26, 2024

Note that you don't need "WIN32 AND MINGW", checking for MINGW is sufficient (implies WIN32).

from libavif.

vrabaud avatar vrabaud commented on September 26, 2024

Hi, we are actually trying something simpler to deal with UTF8 and it reverts the commit you are mentioning: does #1752 work for you? Thx

from libavif.

waldonnis avatar waldonnis commented on September 26, 2024

Hi, we are actually trying something simpler to deal with UTF8 and it reverts the commit you are mentioning: does #1752 work for you? Thx

Unfortunately not, since mt.exe is only provided by the Windows SDK (which may not be installed or in the path) and there doesn't seem to be an equivalent in msys/mingw.

from libavif.

vtorri avatar vtorri commented on September 26, 2024

maybe more informations here : https://sourceforge.net/p/mingw-w64/wiki2/Unicode%20apps/

from libavif.

vtorri avatar vtorri commented on September 26, 2024

and to finish : visual studio solutions sets unicode by default

from libavif.

vrabaud avatar vrabaud commented on September 26, 2024

Thx for the pointers. Would #1802 work for MINGW then ?

from libavif.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.